From aad15a077778eb389458aff4c3e8229e7f373491 Mon Sep 17 00:00:00 2001 From: yyh Date: Thu, 5 Feb 2026 11:42:59 +0800 Subject: [PATCH] fix: return invalidate promises and parallelize invalidations --- .../hooks/use-tool-selector-state.ts | 6 ++- .../hooks/use-inspect-vars-crud-common.ts | 8 ++-- web/service/knowledge/use-metadata.ts | 37 +++++++++++-------- web/service/use-base.ts | 8 ++-- web/service/use-endpoints.ts | 2 +- web/service/use-sandbox-file.ts | 14 ++++--- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/web/app/components/plugins/plugin-detail-panel/tool-selector/hooks/use-tool-selector-state.ts b/web/app/components/plugins/plugin-detail-panel/tool-selector/hooks/use-tool-selector-state.ts index 44d0ff864e..4b57584f19 100644 --- a/web/app/components/plugins/plugin-detail-panel/tool-selector/hooks/use-tool-selector-state.ts +++ b/web/app/components/plugins/plugin-detail-panel/tool-selector/hooks/use-tool-selector-state.ts @@ -193,14 +193,16 @@ export const useToolSelectorState = ({ }, [value, onSelect]) const handleInstall = useCallback(async () => { + const invalidateBuiltinPromise = invalidateAllBuiltinTools() + const invalidateInstalledPromise = invalidateInstalledPluginList() try { - await invalidateAllBuiltinTools() + await invalidateBuiltinPromise } catch (error) { console.error('Failed to invalidate built-in tools cache', error) } try { - await invalidateInstalledPluginList() + await invalidateInstalledPromise } catch (error) { console.error('Failed to invalidate installed plugin list cache', error) diff --git a/web/app/components/workflow/hooks/use-inspect-vars-crud-common.ts b/web/app/components/workflow/hooks/use-inspect-vars-crud-common.ts index bd1d6e62ae..3297dd3397 100644 --- a/web/app/components/workflow/hooks/use-inspect-vars-crud-common.ts +++ b/web/app/components/workflow/hooks/use-inspect-vars-crud-common.ts @@ -221,9 +221,11 @@ export const useInspectVarsCrudCommon = ({ const deleteAllInspectorVars = useCallback(async () => { const { deleteAllInspectVars } = workflowStore.getState() await doDeleteAllInspectorVars() - await invalidateConversationVarValues() - await invalidateSysVarValues() - invalidateSandboxFiles() + await Promise.all([ + invalidateConversationVarValues(), + invalidateSysVarValues(), + invalidateSandboxFiles(), + ]) deleteAllInspectVars() handleEdgeCancelRunningStatus() }, [doDeleteAllInspectorVars, invalidateConversationVarValues, invalidateSysVarValues, invalidateSandboxFiles, workflowStore, handleEdgeCancelRunningStatus]) diff --git a/web/service/knowledge/use-metadata.ts b/web/service/knowledge/use-metadata.ts index 50b2c47ae3..194dcc1041 100644 --- a/web/service/knowledge/use-metadata.ts +++ b/web/service/knowledge/use-metadata.ts @@ -35,7 +35,7 @@ export const useCreateMetaData = (datasetId: string) => { export const useInvalidAllDocumentMetaData = (datasetId: string) => { const queryClient = useQueryClient() return () => { - queryClient.invalidateQueries({ + return queryClient.invalidateQueries({ queryKey: [NAME_SPACE, 'document', datasetId], exact: false, // invalidate all document metadata: [NAME_SPACE, 'document', datasetId, documentId] }) @@ -48,12 +48,14 @@ const useInvalidAllMetaData = (datasetId: string) => { const invalidateAllDocumentMetaData = useInvalidAllDocumentMetaData(datasetId) return async () => { - // meta data in dataset - await invalidDatasetMetaData() - // meta data in document list - invalidDocumentList() - // meta data in single document - await invalidateAllDocumentMetaData() // meta data in document + await Promise.all([ + // meta data in dataset + invalidDatasetMetaData(), + // meta data in document list + invalidDocumentList(), + // meta data in single document + invalidateAllDocumentMetaData(), + ]) } } @@ -113,24 +115,27 @@ export const useBatchUpdateDocMetadata = () => { operation_data: payload.metadata_list, }, }) - // meta data in dataset - await queryClient.invalidateQueries({ + const invalidateDataset = queryClient.invalidateQueries({ queryKey: [NAME_SPACE, 'dataset', payload.dataset_id], }) - // meta data in document list - await queryClient.invalidateQueries({ + const invalidateDocumentList = queryClient.invalidateQueries({ queryKey: [NAME_SPACE, 'document', payload.dataset_id], }) - await queryClient.invalidateQueries({ + const invalidateDocumentTable = queryClient.invalidateQueries({ queryKey: [...useDocumentListKey, payload.dataset_id], }) - - // meta data in single document - await Promise.all(documentIds.map(documentId => queryClient.invalidateQueries( + const invalidateDocuments = Promise.all(documentIds.map(documentId => queryClient.invalidateQueries( { queryKey: [NAME_SPACE, 'document', payload.dataset_id, documentId], }, ))) + + await Promise.all([ + invalidateDataset, + invalidateDocumentList, + invalidateDocumentTable, + invalidateDocuments, + ]) }, }) } @@ -140,7 +145,7 @@ export const useUpdateBuiltInStatus = (datasetId: string) => { return useMutation({ mutationFn: async (enabled: boolean) => { await post(`/datasets/${datasetId}/metadata/built-in/${enabled ? 'enable' : 'disable'}`) - invalidDatasetMetaData() + void invalidDatasetMetaData() }, }) } diff --git a/web/service/use-base.ts b/web/service/use-base.ts index 0a77501747..fa0f270cd7 100644 --- a/web/service/use-base.ts +++ b/web/service/use-base.ts @@ -8,8 +8,8 @@ export const useInvalid = (key?: QueryKey) => { const queryClient = useQueryClient() return () => { if (!key) - return - queryClient.invalidateQueries( + return Promise.resolve() + return queryClient.invalidateQueries( { queryKey: key, }, @@ -21,8 +21,8 @@ export const useReset = (key?: QueryKey) => { const queryClient = useQueryClient() return () => { if (!key) - return - queryClient.resetQueries( + return Promise.resolve() + return queryClient.resetQueries( { queryKey: key, }, diff --git a/web/service/use-endpoints.ts b/web/service/use-endpoints.ts index 79702068ab..eaaf7a66e3 100644 --- a/web/service/use-endpoints.ts +++ b/web/service/use-endpoints.ts @@ -26,7 +26,7 @@ export const useEndpointList = (pluginID: string) => { export const useInvalidateEndpointList = () => { const queryClient = useQueryClient() return (pluginID: string) => { - queryClient.invalidateQueries( + return queryClient.invalidateQueries( { queryKey: [NAME_SPACE, 'list', pluginID], }, diff --git a/web/service/use-sandbox-file.ts b/web/service/use-sandbox-file.ts index fa494de1f4..2f046ddb0f 100644 --- a/web/service/use-sandbox-file.ts +++ b/web/service/use-sandbox-file.ts @@ -55,12 +55,14 @@ export function useSandboxFileDownloadUrl( export function useInvalidateSandboxFiles() { const queryClient = useQueryClient() return useCallback(() => { - queryClient.invalidateQueries({ - queryKey: consoleQuery.sandboxFile.listFiles.key(), - }) - queryClient.invalidateQueries({ - queryKey: consoleQuery.sandboxFile.downloadFile.key(), - }) + return Promise.all([ + queryClient.invalidateQueries({ + queryKey: consoleQuery.sandboxFile.listFiles.key(), + }), + queryClient.invalidateQueries({ + queryKey: consoleQuery.sandboxFile.downloadFile.key(), + }), + ]) }, [queryClient]) }