需要一种方法或工具来等待节点中的代码块
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);
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);