如何在重复执行的同步代码中轮询Promise?
如何在重复调用的同步代码中使用已fulfilled的Promise结果
要解决这个问题,咱们可以额外维护两个变量,分别标记Promise的完成状态和存储它的结果,然后在Promise的then回调里更新这些变量,之后每次同步调用updater时就能直接检查状态、拿到结果了。
修改后的代码示例:
let promise = FetchSomething(); // 初始化状态标记和结果存储变量 let isPromiseDone = false; let promiseData = null; // 监听Promise完成事件,更新状态和结果 promise.then(data => { isPromiseDone = true; promiseData = data; }); let updater = () => { drawSomething(); // 同步检查Promise是否已完成 if (isPromiseDone) { drawThing(promiseData); // 可选:如果只需要执行一次drawThing,这里可以取消动画帧循环 // cancelAnimationFrame(updaterId); } const updaterId = requestAnimationFrame(updater); } updater();
细节说明
isPromiseDone用来同步判断Promise是否已经进入fulfilled状态,promiseData专门存储Promise resolve的结果- Promise的
then回调会在它完成时异步执行,这时候我们就把状态标记设为true,同时保存结果 - 每次
updater执行时,直接同步检查isPromiseDone,为true就可以直接使用promiseData - 如果只需要执行一次
drawThing,记得在调用后用cancelAnimationFrame取消循环,避免不必要的重复检查
内容的提问来源于stack exchange,提问作者dronus
相关产品推荐
相关产品推荐

