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

2 javascript asynchronous promise 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");
  
Run Code Online (Sandbox Code Playgroud)

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

小智 5

您可以将.finally()任意数量的调用链接到任何 Promise 上。
(Promise.all() 返回一个新的 Promise,因此此规则也适用于此处。)

运行此命令,您应该会看到所有 3 条评论日志。

Promise.resolve().
  finally(() => console.log('Finally #1')).
  finally(() => console.log('Finally #2')).
  finally(() => console.log('Finally #3'))
Run Code Online (Sandbox Code Playgroud)