我期待 finally 在解決所有承諾后運行,但我看到它在解決第一個承諾后運行。所以我有兩個問題:(1)每個promise的finally一個就像catch一樣,也就是說,我可以有一個finally per promise還是因為這種行為?(2)如果我需要一個 finally 在解決所有承諾后運行,我是否只需要一個,就像 catch 一樣?
let variable = new Promise((resolve, reject) => {
console.log('empiezo 1era promesa, espero 9');
setTimeout(() => {
resolve(1);
}, 9000);
})
.finally(() => {
console.log('empieza finally');
})
.then(data => {
return new Promise((resolve, reject) => {
console.log('1era promesa resulta, empiezo 2da promesa, espero 5 seg');
setTimeout(() => {
resolve(2);
}, 5000);
});
})
.then(data => {
console.log('2da promesa resulta, ya termino todo');
console.log(data);
})
輸出: empiezo 1era promesa, espero 9 empieza finally 1era promesa resulta, empiezo 2da promesa, espero 5 seg 2da promesa resulta, ya termino todo 2
我的懷疑是因為我總是看到最后只有一個的例子,而這個是在解決所有承諾后執行的。
uj5u.com熱心網友回復:
所有then,catch和finally方法都是“每個承諾”,它們被呼叫的承諾。它們都回傳一個新的 Promise,該 Promise 將在回呼運行后解決,并且它們不知道鏈下(甚至其他鏈中)的任何其他 Promise。
如果您希望您的finally回呼在您的鏈中的所有承諾都解決后運行,您也應該在最后鏈接它。
uj5u.com熱心網友回復:
非常感謝@derpirscher 和@Bergi,這兩個答案已經解決了我對承諾的最后疑慮,2 應該是最好的答案,但我必須選擇一個。@Aidin 感謝您為 all() 用例打開了我的思路的鏈接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444556.html
標籤:javascript 异步 es6-承诺
