承诺中的finally()执行顺序

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

我的疑问是因为我总是看到最后只有一个最后的例子,而这个例子是在解决所有承诺后执行的。

Ber*_*rgi 5

所有的then,catchfinally方法都是“每个承诺”,即它们被调用的承诺。它们都返回一个新的承诺,该承诺将在回调运行后解决,并且它们不知道链下游(甚至其他链中)的任何其他承诺。

如果您希望finally回调在链中的所有承诺都解决后运行,那么您还应该最后将其链接起来。