为何无参数的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
相关产品推荐
相关产品推荐

