【问题标题】:Async/Await while avoiding the Try/Catch block?Async/Await 同时避免 Try/Catch 块?
【发布时间】:2018-06-21 17:37:06
【问题描述】:

我已经使用 Node 大约一个月了,我想利用可用的最新功能,例如 Async/Await 样式,但我不喜欢使用它的 try/catch 块。我一直在尝试制作某种包装类和/或函数来包装异步/等待。

我使用 await-to-js npm 模块的解构逻辑来部分减轻 try/catch 的使用,但我对如何在不使用 es6 承诺的情况下在异步函数之外使用它感到有些困惑,以及如何我使用这种方法链接了多个等待?

任何帮助、建议或批评,如果我做错了什么,我们将不胜感激。

【问题讨论】:

  • 你能不能给出一个简单的代码示例,一个是.then/.catch,一个是await/async,还有你认为必须使用try的地方@ 987654327@。您将需要与需要 .catch 语句相同数量的 try-catch 块。
  • 这里你可以这样做stackoverflow.com/a/61833084/6482248它看起来更干净

标签: javascript node.js asynchronous es6-promise es6-class


【解决方案1】:

避免在async/await 中使用try/catch 块的一个好选择是创建一个用于错误处理的高阶函数:

function catchErrors(fn) {
  return function(...args) {
    return fn(...args).catch((err) => {
      console.error(err);
    })
  }
}

async function asyncFunc(name, value) {
  const a = await ...
  const b = await ...
  /* ... */
}

// Wrap it in an higher-order function
const wrappedAsyncFunc = catchErrors(asyncFunc);

wrappedAsyncFunc("lala", 4);

【讨论】:

    【解决方案2】:

    你必须选择。使用 trycatch 块或使用承诺。 async/await 存在的原因,是为那些不喜欢 promises,而更喜欢简洁代码的人准备的。

    如果你不想要两者,你可以使用

    https://nodejs.org/api/process.html#process_event_uncaughtexception

    https://nodejs.org/api/process.html#process_event_unhandledrejection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-14
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 2021-11-16
      • 2020-02-20
      相关资源
      最近更新 更多