3 javascript asynchronous es6-promise
我原本期望最终在解决所有承诺后运行,但我看到它在解决第一个承诺后运行。所以我有两个问题:(1)每个promise的finally是否就像catch一样,也就是说,我可以有一个permise的finally还是因为这种行为?(2) 如果我需要在解决所有promise后运行finally,我是否只需要在最后运行一个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);
})
Run Code Online (Sandbox Code Playgroud)
输出:empiezo 1era promesa、espero 9 empieza 最后 1era promesa resulta、empiezo 2da promesa、espero 5 seg 2da promesa resulta、ya termino todo 2
我的疑问是因为我总是看到最后只有一个最后的例子,而这个例子是在解决所有承诺后执行的。
所有的then,catch和finally方法都是“每个承诺”,即它们被调用的承诺。它们都返回一个新的承诺,该承诺将在回调运行后解决,并且它们不知道链下游(甚至其他链中)的任何其他承诺。
如果您希望finally回调在链中的所有承诺都解决后运行,那么您还应该最后将其链接起来。