需要一种方法或工具来等待节点中的代码块

Need a way or a tool to await a code block in node

ES2017 async/await 功能很棒。它减少了编写递归回调的痛苦。但是,我有时会看到 nodejs 运行 时间警告,如 unhandled promise rejection。原因是我忘记在 async 代码块

中的每个地方放置 await
function action1Async() {
  return new Promise((resolve, reject) => {
    resolve('good name async function')
  })
}
async function action2() {
  return new Promise((resolve, reject) => {
    reject('bad name async function')
  })
}

async function main() {
  const r1 = await action1Async()
  const r2 = action2() // The name is bad, I dont realize it is an async function. Actually throw an exception
  return r1 + r2
}

正如您从代码示例中看到的那样,除非我在每次函数调用时都放置await,否则很容易让代码出错。我相信 ES 草案社区发明 await 来控制 async 块内的行为是有原因的。

我编写正确的代码没有问题。但是我认为在我打算同步 运行 的代码块中写这么多 await 太全面了。是否可以自动解决代码块内的所有承诺,就像协程一样?使用一些静态工具或神奇的 JS 库?

提前致谢

Promise.all 如果您可以将结果作为值数组处理,那么函数将正常工作。

async function main() {
  const r1 = await action1Async()
  const r2 = action2() // The name is bad, I dont realize it is an async function. Actually throw an exception
  return Promise.all([r1, r2]).then(function (res) {
      return res[0] + res[1];
  })
}

main()
.then(console.log)
.catch(console.log);