如何在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
相关产品推荐
相关产品推荐

