From 7b1a48f1f7a80da5dacc486ffb67deed3beeb41e Mon Sep 17 00:00:00 2001 From: Script Generator Date: Mon, 29 Jun 2026 18:46:54 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=B0=8F=E5=AE=9D=E9=A2=84=E8=AD=A6):=20?= =?UTF-8?q?=E4=B8=B2=E8=A1=8C=E4=BF=9D=E5=AD=98=E9=A3=8E=E9=99=A9=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web/stores/useXiaobaoRiskStore.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/apps/web/stores/useXiaobaoRiskStore.ts b/apps/web/stores/useXiaobaoRiskStore.ts index 2428994..960350c 100644 --- a/apps/web/stores/useXiaobaoRiskStore.ts +++ b/apps/web/stores/useXiaobaoRiskStore.ts @@ -35,6 +35,9 @@ async function loadInsights(): Promise { return null; } +let snapshotSaveQueue: Promise = Promise.resolve(); +let insightSaveQueue: Promise = Promise.resolve(); + export const useXiaobaoRiskStore = create((set, get) => ({ snapshots: [], insights: [], @@ -52,11 +55,15 @@ export const useXiaobaoRiskStore = create((set, get) => ({ saveSnapshot: async (item) => { const optimistic = upsertDailySnapshot(get().snapshots, item); set({ snapshots: optimistic, error: undefined }); - try { + const task = snapshotSaveQueue.then(async () => { const remote = await loadServerData('xiaobao-risk-snapshots'); - const snapshots = mergeDailySnapshotCacheForSave(optimistic, Array.isArray(remote) ? remote : [], item); + const snapshots = mergeDailySnapshotCacheForSave(get().snapshots, Array.isArray(remote) ? remote : [], item); set({ snapshots, error: undefined }); await saveServerData('xiaobao-risk-snapshots', snapshots); + }); + snapshotSaveQueue = task.catch(() => undefined); + try { + await task; } catch (error) { set({ error: '小宝预警快照保存失败' }); throw error; @@ -66,11 +73,15 @@ export const useXiaobaoRiskStore = create((set, get) => ({ saveInsight: async (item) => { const optimistic = upsertInsight(get().insights, item); set({ insights: optimistic, error: undefined }); - try { + const task = insightSaveQueue.then(async () => { const remote = await loadServerData('xiaobao-risk-insights'); - const insights = mergeInsightCacheForSave(optimistic, Array.isArray(remote) ? remote : [], item); + const insights = mergeInsightCacheForSave(get().insights, Array.isArray(remote) ? remote : [], item); set({ insights, error: undefined }); await saveServerData('xiaobao-risk-insights', insights); + }); + insightSaveQueue = task.catch(() => undefined); + try { + await task; } catch (error) { set({ error: '小宝预警解读保存失败' }); throw error;