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

为什么未使用await的情况下,定义的Promise也会自行resolve?

Promise 惰性执行问题解决方案

根本原因

Promise 采用 eager(立即执行) 设计模型:当你调用later(1000)创建 Promise 实例时,传入 Promise 构造函数的执行器函数会同步立即运行,内部的setTimeout会直接触发计时,和后续是否await没有关联。你当前代码中数组直接存储了已经实例化的 Promise,所以会自动执行到 resolve 状态。

实现方案

核心思路是将数组中存储的内容从「已实例化的 Promise」改为「返回 Promise 的工厂函数」,仅在需要执行时才调用函数生成 Promise 实例:

// 存储返回Promise的工厂函数,不提前创建Promise实例
const promiseFactories = [() => later(1000)];

function later(delay:number) {
    return new Promise<void>(function(resolve) {
        setTimeout(() => {
          console.log('test');
          resolve();
        }, delay);
    });
}

需要触发执行时,先遍历调用所有工厂函数生成 Promise 实例,再通过Promise.all等待执行完成:

await Promise.all(promiseFactories.map(factory => factory()));

这样调整后,只有执行上述调用代码时,Promise 内部的异步逻辑才会被触发,完全符合需求。

内容的提问来源于stack exchange,提问作者anonymous-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:15:07