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

如何在重复执行的同步代码中轮询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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:10