我可以在 Promise.all() 中有多个 .finally() 以及多个 .catch() 吗?

Can I have multiple .finally() as well as multiple .catch() in Promise.all()?

var p1 = new Promise((resolve, reject) => {

        resolve('p1');
    });

    var p2 = new Promise((resolve, reject) => {
        resolve('p2');
    });
    Promise.all([
        p1.finally(() => { console.log("p1 completed"); }),
        p2.finally(() => { console.log("p2 completed"); }),
    ]).then(values => {
        console.log(values[0]);
        console.log(values[1]);
    }).finally(() => {
        console.log("all() completed");
  

我想我只在网络上看到过 结尾有一个 .finally() 的例子 [1]: https://i.stack.imgur.com/HeQV8.png

您可以将任意数量的 .finally() 调用链接到任何承诺上。
(Promise.all() returns 一个新的承诺,所以这条规则也适用于此。)

运行 这个,你应该会看到所有 3 条评论记录。

Promise.resolve().
  finally(() => console.log('Finally #1')).
  finally(() => console.log('Finally #2')).
  finally(() => console.log('Finally #3'))

当然,finally 是一个可链接的 promise 方法,就像 catch 一样(唯一的区别是它的回调不接受参数)。您可以根据任何承诺多次使用它。

Promise.all([
    p1.finally(() => { console.log("p1 completed"); }),
    p2.finally(() => { console.log("p2 completed"); }),
]).finally(() => {
    console.log("all() completed");
})