From 69efc65e77dc6a48651941c376f03c4a5920efc2 Mon Sep 17 00:00:00 2001 From: Alexander Brown <448862+DrJKL@users.noreply.github.com> Date: Mon, 26 Jan 2026 21:30:45 -0800 Subject: [PATCH] fix: await concurrent calls to load() in settingStore and workflowStore - Return early if already loaded (isReady/isSyncReady) - Use VueUse `until()` to await in-progress loading instead of returning undefined - Ensures all callers properly wait for initialization to complete Amp-Thread-ID: https://ampcode.com/threads/T-019bfdee-7166-76c3-8c5f-473717a9148b Co-authored-by: Amp --- src/platform/settings/settingStore.ts | 13 +++++++++---- .../workflow/management/stores/workflowStore.ts | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/platform/settings/settingStore.ts b/src/platform/settings/settingStore.ts index ed46c8b00..253510729 100644 --- a/src/platform/settings/settingStore.ts +++ b/src/platform/settings/settingStore.ts @@ -1,6 +1,6 @@ import { retry } from 'es-toolkit' import _ from 'es-toolkit/compat' -import { useAsyncState } from '@vueuse/core' +import { until, useAsyncState } from '@vueuse/core' import { defineStore } from 'pinia' import { compare, valid } from 'semver' import { ref } from 'vue' @@ -71,10 +71,15 @@ export const useSettingStore = defineStore('setting', () => { { immediate: false } ) - async function load() { - if (!isReady.value && !isLoading.value) { - return loadSettingValues() + async function load(): Promise { + if (isReady.value) return + + if (isLoading.value) { + await until(isLoading).toBe(false) + return } + + await loadSettingValues() } /** diff --git a/src/platform/workflow/management/stores/workflowStore.ts b/src/platform/workflow/management/stores/workflowStore.ts index ceaaedcaa..27a804d2e 100644 --- a/src/platform/workflow/management/stores/workflowStore.ts +++ b/src/platform/workflow/management/stores/workflowStore.ts @@ -1,5 +1,5 @@ import _ from 'es-toolkit/compat' -import { useAsyncState } from '@vueuse/core' +import { until, useAsyncState } from '@vueuse/core' import { defineStore } from 'pinia' import { computed, markRaw, ref, shallowRef, watch } from 'vue' import type { Raw } from 'vue' @@ -558,10 +558,15 @@ export const useWorkflowStore = defineStore('workflow', () => { return executeSyncWorkflows(0, dir) } - async function loadWorkflows() { - if (!isSyncReady.value && !isSyncLoading.value) { - return syncWorkflows() + async function loadWorkflows(): Promise { + if (isSyncReady.value) return + + if (isSyncLoading.value) { + await until(isSyncLoading).toBe(false) + return } + + await syncWorkflows() } const bookmarkStore = useWorkflowBookmarkStore()