You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Svelte中等待userInfo Store值为true后调用数据(TS)

解决方案

方案一:响应式变量监听(推荐,适配Vue场景)

你用到的$userInfo属于响应式变量,最适配的方式是监听它的状态变化,同时初始化时做一次检查避免错过初始值:

onMount(function() {
    // 初始化先检查一次
    if ($userInfo) {
        getYearGroupSchedule($yeargroup, weekdates);
    }

    // 监听$userInfo的状态变化
    const unwatch = watch(() => $userInfo, (newVal) => {
        if (newVal) {
            getYearGroupSchedule($yeargroup, weekdates);
            // 只需要触发一次的话,执行后移除监听
            unwatch();
        }
    });
});

方案二:自定义Promise等待变量变更

贴合你熟悉的Promise异步逻辑,可以封装一个等待函数,明确等待$userInfo变为true后再执行目标函数:

// 封装等待$userInfo生效的Promise函数
function waitForUserInfoReady() {
    return new Promise((resolve) => {
        // 当前已经满足条件,直接resolve
        if ($userInfo) {
            resolve();
            return;
        }
        // 用监听等待状态变更(Vue环境下优先用这个)
        const unwatch = watch(() => $userInfo, (newVal) => {
            if (newVal) {
                resolve();
                unwatch();
            }
        });
        // 非Vue环境可以用轮询(性能略差,适合理解逻辑)
        /*
        const checkInterval = setInterval(() => {
            if ($userInfo) {
                clearInterval(checkInterval);
                resolve();
            }
        }, 100);
        */
    });
}

// 在onMount中使用
onMount(async function check() {
    await waitForUserInfoReady();
    getYearGroupSchedule($yeargroup, weekdates);
});

注意事项

  • 如果$userInfo是Vue的响应式变量(ref/reactive),优先用监听方案,轮询会额外消耗性能。
  • 若只需要执行一次getYearGroupSchedule,记得在触发后移除监听(调用unwatch()),防止重复执行。
  • 确保调用getYearGroupSchedule时,$yeargroup和weekdates已经有正确值,避免传入无效参数。

内容的提问来源于stack exchange,提问作者Stephen Okita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:21:58