【问题标题】:Can I have multiple .finally() as well as multiple .catch() in Promise.all()?我可以在 Promise.all() 中有多个 .finally() 和多个 .catch() 吗?
【发布时间】:2021-09-30 22:01:10
【问题描述】:

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

【问题讨论】:

  • 在此处发布代码 sn-p,而不是图像
  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。有关更多信息,请参阅元常见问题解答条目Why not upload images of code/errors when asking a question?
  • 将其粘贴到问题中,而不是评论中。
  • 您可以使用Stack Snippet 使其可执行。

标签: javascript asynchronous promise promise.all


【解决方案1】:

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

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

【讨论】:

  • 谢谢,是的,这是我的问题,但首先执行 .finally() console.logs,然后执行 .then() console.logs。这样执行顺序是否正确,我认为先执行 .then(),然后执行 .finally(),请参阅.... // p1 完成 // p2 完成 // p1 // p2 // all( ) 完成
  • @DanielTinajeroDíaz 我不确定您正在运行什么代码,但承诺链按链接顺序执行。请注意,每个方法都返回一个新的 Promise,该 Promise 在回调运行后解析。唯一的区别是,对于 finally,回调在执行和拒绝时都运行。
  • 在一个首先执行的承诺中,是 .finally() 还是 .then() 处理程序?对不起,我几乎是 promise 的初学者
  • @DanielTinajeroDíaz 您还没有发布同时调用.then().finally() 的代码,但也许看看thisthat - 那里对then 的说法相同为finally 保留。
  • 准备好了,我已经编辑了问题中的代码,执行顺序是什么?, finally() 先还是 .then()?
【解决方案2】:

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

运行此程序,您应该会看到所有 3 个 cmets 日志。

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

【讨论】:

  • 谢谢,我明白了
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
相关资源
最近更新 更多