我原本希望finally在解析所有promise之后运行,但我发现它在解析第一个promise之后才运行。所以我有两个问题:(1( 最后一个每一个承诺是否就像陷阱一样,也就是说,我可以有最后一个每个承诺吗?还是因为这种行为?(2( 如果我需要一个在解决所有承诺后运行的最终版本,我是否只需要一个最终版本,就像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,特别是9恩皮扎终于来了1个结果,2个结果,特别是5段2个promesa resulta,你要结束了2
我的怀疑是因为我总是看到最后只有一个的例子,而这个例子是在解决了所有承诺之后执行的。
所有的then
、catch
和finally
方法都是"每个承诺";,他们都返回了一个新的promise,该promise将在回调运行后解析,并且他们不知道链下游(甚至在其他链中(的任何其他promise。
如果你想让你的finally
回调在你的链中的所有承诺都结算后运行,那么你最终也应该把它链起来。