【问题标题】:Automatic error passing on async functions在异步函数上自动传递错误
【发布时间】:2020-02-27 02:05:10
【问题描述】:

我有一些 async 函数等待其中的一些可能被拒绝的承诺,我想将所有错误传递给函数返回的承诺。 JS 会自动做这个吗?

例如:

async foo(){
  bar_result = await bar();
  baz_result = await baz();
  return 'ok';
}

foo()
  .then(console.log)
  .catch(console.error);

如果bar() 或baz() 被拒绝,上面的例子会发生什么?直觉上,他们会在.catch(console.error) 线被抓到……

我的替代想法是将函数的内容包围在 try 块中,然后是 catch(err){ throw err; },但它看起来是多余的......

【问题讨论】:

    标签: javascript ecmascript-2016


    【解决方案1】:

    在 async 函数内部,如果一个 Promise 是 awaited,并且该 Promise 拒绝,该函数将立即终止,并且它返回的 Promise 将拒绝(与被拒绝的 awaited 具有相同的值承诺)。您的函数将按需要工作 - 如果 bar 或 baz 拒绝,console.error 将导致拒绝被记录(并且不会调用 console.log)。

    【讨论】:

    • 你有这个来源吗?我一直试图从一些文档中得到证明。
    • 这就是await 的工作原理——如果你愿意,你可以自己尝试不同的bars 和bazs。如果你想看官方对其功能的描述,可以browse through the specification,不过还是挺密集的。
    猜你喜欢
    • 2015-12-01
    • 2018-06-26
    • 2018-01-26
    • 2018-10-12
    • 2021-03-31
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多