ES2017 async/await
功能非常棒。它减少了编写递归回调的痛苦。但是,我有时会看到像unhandled promise rejection
这样的nodejs运行时警告。原因是我忘记将await
放在async
代码块中的每个位置
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库?
提前致谢
答案 0 :(得分:1)
如果您可以将结果作为一组值处理,那么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);