承诺中的执行顺序 finally()

execution order finally() in promises

我期待在解决所有承诺后最终 运行,但我看到它在解决第一个承诺后 运行s。所以我有两个问题: (1) finally per promise 和 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 终于 1era promesa resulta, empiezo 2da promesa, espero 5 seg 2da promesa resulta, ya termino todo 2

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

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

如果你希望你的 finally 回调到 运行 在你链中的所有 promise 都已经解决之后,你也应该把它链在最后。