为什么 Promise then 不带参数仍然传递第一个值而不是 undefined ?

Giz*_* 31 3 javascript promise

考虑这段代码:

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

p.then().then(function(data) {
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)

它输出“确定”。

我不明白第一个then被调用后会发生什么。当第一个then被调用时,它会返回undefined,这又会then用一个值解析为此创建的承诺undefined

然而,由于某种原因,当第二个then被调用时,它被传递“OK”data并随后记录它。“数据”从哪里来?

tri*_*cot 6

这种值的“转发”是有意的行为。Mozilla 贡献者写道:

参数

onFulfilled选修的

当这个承诺实现时异步执行的函数。[...]

如果它不是函数,则在内部将其替换为恒等函数 ( (x) => x),该函数仅向前传递履行值。