2017-04-11 82 views
2

我經歷Chain-ability of Promises和代碼如下所示:如果第一個回調沒有返回Promise,那麼可以調用它?

Promise.resolve(123) 
    .then((res) => { 
     console.log(res); // 123 
     return 456; 
    }) 
    .then((res) => { 
     console.log(res); // 456 
     return Promise.resolve(123); // Notice that we are returning a 
Promise 
    }) 

第一個回調不返回一個承諾,但其餘的事。 完成後可以調用then

+5

'.then' ** **總是返回一個承諾 - 你的回調中返回什麼是 「promisified」 如果需要的話 –

回答

2

如前所述@jaromanda-x

的然後方法返回一個無極其允許方法鏈接。

可以傳遞一個lambda到然後,如果它返回一個承諾,一個 等效無極將暴露於後續然後在 方法鏈。下面的代碼片段用 setTimout函數模擬異步代碼。

當一個值從一個lambda表達式中返回時,它將實際返回Promise.resolve(<value returned by whichever handler was called>)

var p2 = new Promise(function(resolve, reject) { 
    resolve(1); 
}); 

p2.then(function(value) { 
    console.log(value); // 1 
    return value + 1; 
}).then(function(value) { 
    console.log(value + '- This synchronous usage is virtually pointless'); // 2- This synchronous usage is virtually pointless 
}); 

p2.then(function(value) { 
    console.log(value); // 1 
}); 

瞭解更多關於MDN

相關問題