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

为何无参数的Promise then方法仍传递初始值而非undefined?

Promise空then调用的透传逻辑解析

先看你的代码:

var p = new Promise(function(resolve, reject) {
    setTimeout(function() {
        resolve("OK");
    }, 1000);
});

p.then().then(function(data) {
    console.log(data);
});

这段代码最终输出"OK",你疑惑的是:第一个then()没传参数,为什么第二个then还能拿到"OK"?

核心原因是Promise的then方法有默认行为:

  • 当你调用then()但不传入成功回调(或者传入undefined)时,这个then会返回一个新的Promise,这个新Promise会直接沿用原Promise的决议值完成resolve。
  • 简单说,空的then()相当于自动帮你补了一个(value) => value的回调——把原Promise的resolve值原封不动地传下去。
  • 所以第一个then()返回的新Promise依然以"OK"作为resolve值,第二个then自然就能接收到这个值并打印。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:12:02