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

为何相同10秒延迟下,Promise对象的resolve时机存在差异?

为什么两段延迟Promise的状态变化时机不同?

先看两段代码:

Code1

let p = new Promise((resolve,reject) => {
    setTimeout(() => {console.log("itsdone"); resolve("done");},10000);
});

Code2

let p = new Promise((resolve,reject) => {
    setTimeout(resolve("done"),10000);
});

核心差异原因

  • Code1逻辑符合预期:你给setTimeout传递的是一个箭头函数,这个函数不会立即执行,要等10秒后才会被调用。箭头函数内部才会触发console.log和resolve("done"),所以Promise的状态会在10秒后变为resolved。

  • Code2的问题出在调用方式:这里你直接执行了resolve("done"),而不是把它作为回调函数传给setTimeout。resolve("done")会立即执行,瞬间把Promise的状态改成resolved。而resolve函数的返回值是undefined,相当于你给setTimeout传的第一个参数是undefined,第二个是10000——这时候setTimeout相当于白设置了,因为它要求第一个参数必须是函数,而非undefined。

修正Code2的方法

如果想让Code2和Code1一样10秒后resolve,得把resolve包装成函数传给setTimeout:

let p = new Promise((resolve,reject) => {
    setTimeout(() => resolve("done"),10000);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:52:03