2017-06-26 125 views
-1

我想知道爲什麼,如果then()的onFulfilled處理程序返回一個承諾p2,那麼如何()返回一個新的承諾p3而不是僅僅返回p2 ?爲什麼然後返回一個新的承諾,而不是返回承諾返回的onFulfilled

例子:

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的?它會有相同的結果。

回答

3

因爲then()在您的回調甚至運行之前立即返回值

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

-1

只是因爲p3被創建並返回之前onFulfilled回調將運行 - then回調總是異步的。它還不知道未來會返回什麼樣的價值,所以它爲它創造了一個承諾。