【问题标题】:node async/await -- do I need try/catch?节点异步/等待——我需要尝试/捕获吗?
【发布时间】:2017-05-17 02:23:39
【问题描述】:

我只是在节点中使用 async/await ,似乎如果你正在等待一个承诺并且它被拒绝它就会抛出。我想知道是否有比返回我不知道的 try/catch 块更简洁的模式?

async function foo() {
  const val = await Promise.reject();
}

【问题讨论】:

  • 现在看来是这样的。
  • 您能否详细说明您认为“更清洁”的是什么?
  • @jib - try/catch 不是干净的控制结构。被拒绝的承诺并不总是意味着错误,一个级别的错误并不总是构成更高级别的错误(例如fs.access throws 如果您无法访问文件,但这是适当的方式检查如果您有权访问)。 try/catch 用于意外错误,而不是预期错误。

标签: javascript node.js async-await ecmascript-2017


【解决方案1】:

try/catch() 更简洁的模式,同步和异步错误处理对齐:

(目前适用于 Chrome 和 Firefox 开发者版)

function a(heads) {
  if (heads) throw new Error("Synchronous error");
}

async function b() {
  await Promise.resolve();
  throw new Error("Asynchronous error");
}

async function main(heads) {
  try {
    a(heads);
    await b();
  } catch (e) {
    console.log(e.message);
  }
}
main(false); // Synchronous error
main(true);  // Asynchronous error

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 2019-10-20
    • 2020-08-06
    • 2012-11-02
    • 2018-04-20
    • 2019-10-24
    • 2021-09-25
    • 1970-01-01
    相关资源
    最近更新 更多