技术与生活 / 一篇记录
await 让代码像同步,但执行仍然异步
await 让异步代码更易读,但函数调用者仍然需要处理异步结果。
async 函数把返回值包装为 Promise,遇到 await 时把后续执行交还给异步调度。它改变的是表达方式,并不会让耗时操作失去延迟或失败的可能。
操作与观察
以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。
async function demo() { return 42; } demo().then(console.log);
直接打印 demo(),与等待结果后的值做比较。
先用一个返回固定值的函数理解返回类型,再加入可能拒绝的操作。不相关任务可以并发等待,但不要对有先后依赖的步骤盲目使用并行。
并发执行还需要考虑失败策略。Promise.all 会在某项拒绝后使组合结果拒绝,但不等于其他任务自动取消。需要收集全部结果时,应根据业务选择合适的组合方式。
别遗漏这条边界
不相关任务逐个 await 会失去原本可以并发执行的机会。
参考:JavaScript 文档。