为什么然后返回一个新的承诺,而不是返回onFulfilled

时间:2017-06-26 17:55:00

标签: javascript promise es6-promise

我想知道为什么,如果then()的onFulfilled处理程序返回一个promise p2,那么then()如何返回一个新的promise p3而不是只返回p2?

示例:

let p1 = new Promise(function(resolve, reject) {
    resolve(42);
});

let p2 = new Promise(function(resolve, reject) {
    resolve(43);
});

let p3 = p1.then(function(value) {
    // first fulfillment handler
    console.log(value);     // 42
    return p2;
});

p3.then(function(value) {
    // second fulfillment handler
    console.log(value);     // 43
});

为什么p1.then()不返回p2而不是新的承诺p3?它会有相同的结果。

2 个答案:

答案 0 :(得分:3)

因为then()会立即返回值 ,所以在回调甚至运行之前。

它不可能知道你将要返回什么。

答案 1 :(得分:-1)

只是因为在p3回调运行之前创建并返回了onFulfilled - then回调始终是异步的。它无法知道将来会返回什么价值,因此它为它创造了一个承诺。