From acec271e8886b536ca6395441e95d2d8839647fc Mon Sep 17 00:00:00 2001 From: yyh Date: Wed, 28 Jan 2026 20:25:12 +0800 Subject: [PATCH] fix(skill): resolve race condition in upload progress tracking Use shared object reference instead of separate variables to track upload progress across concurrent Promise.all operations, preventing progress bar from showing incorrect or regressing values. --- .../workflow/skill/hooks/use-create-operations.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/web/app/components/workflow/skill/hooks/use-create-operations.ts b/web/app/components/workflow/skill/hooks/use-create-operations.ts index 0d240af91f..4073545347 100644 --- a/web/app/components/workflow/skill/hooks/use-create-operations.ts +++ b/web/app/components/workflow/skill/hooks/use-create-operations.ts @@ -53,8 +53,7 @@ export function useCreateOperations({ } const total = files.length - let uploaded = 0 - let failed = 0 + const progress = { uploaded: 0, failed: 0 } storeApi.getState().setUploadStatus('uploading') storeApi.getState().setUploadProgress({ uploaded: 0, total, failed: 0 }) @@ -65,17 +64,17 @@ export function useCreateOperations({ uploadFiles.map(async (file) => { try { await uploadFile.mutateAsync({ appId, file, parentId }) - uploaded++ + progress.uploaded++ } catch { - failed++ + progress.failed++ } - storeApi.getState().setUploadProgress({ uploaded, total, failed }) + storeApi.getState().setUploadProgress({ uploaded: progress.uploaded, total, failed: progress.failed }) }), ) - storeApi.getState().setUploadStatus(failed > 0 ? 'partial_error' : 'success') - storeApi.getState().setUploadProgress({ uploaded, total, failed }) + storeApi.getState().setUploadStatus(progress.failed > 0 ? 'partial_error' : 'success') + storeApi.getState().setUploadProgress({ uploaded: progress.uploaded, total, failed: progress.failed }) } catch { storeApi.getState().setUploadStatus('partial_error')