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

如何避免重复调用Promise?解决Promise执行时机与重复执行问题

解决方案

核心思路是缓存Promise实例,确保不管调用多少次,只会创建一次Promise,executor函数仅执行一次。

实现方式:用闭包缓存已创建的Promise,每次调用函数时先检查是否已有实例,有则直接返回,没有则创建并缓存。

const getMyPromise = (() => {
  let cachedPromise = null;
  return () => {
    if (!cachedPromise) {
      cachedPromise = new Promise(function(resolve, reject) {
        console.log("Called");
        resolve(10);
      });
    }
    return cachedPromise;
  };
})();

(async () => {
  console.log(await Promise.race([getMyPromise()]));
  console.log(await Promise.all([getMyPromise()]));
})();

原理说明

  • 利用立即执行函数表达式创建闭包,保存cachedPromise变量,外部无法直接修改。
  • 第一次调用getMyPromise()时,cachedPromise为null,创建Promise实例并缓存,此时executor函数执行,打印"Called"。
  • 后续再调用getMyPromise(),直接返回已缓存的Promise实例,不会重新创建,所以executor不会重复执行。
  • 不管是Promise.race还是Promise.all,使用的都是同一个Promise实例,既满足了延迟执行(首次调用时才创建),又避免了重复执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:10:27