async/await without the bell's Async/await 是现代JavaScript的面包和黄油.
它使一个同步代码看起来是同步的,这对可读性来说是巨大的.
但是,它有它自己的一套脚枪 可以咬你的生产。
这是如何避免他们。
陷阱一:循环忘却 你可能会写这样的东西,期待每个请求在下次开始前完成: 没错 当您忘记了内幕或内幕时就会出现问题:函数总是返回承诺。
所以如果你用Aync回调, 你得到一系列的承诺。
要修复它,请使用:但要小心:失败快.
如果有一个请求失败,整个事情就拒绝了.
如果您需要单独处理失败, 请使用 。
陷阱2:悄悄地吞噬错误 一个常见的错误就是捕捉出一个错误而无所事事,这使得调试成为了一场噩梦: 总是至少登录错误 。
更好的是,优雅地处理它 或者重放它: 如果你在使用,不处理的承诺拒绝 可能会在Node.js崩溃你的应用程序。
总是有捕捉或全球处理者。
坑道 3: 当您需要平行执行时顺序执行 使用循环中使请求逐一运行 。
如果他们是独立的,那就是表演打击:但不要过份.
并行请求可以超过服务器或命中速率限制.
一个很好的中间点是用块块来批量它们。
Pitchfall 4:在不需要的时候使用,如果一个功能没有内在,使得它没有必要,并且可以引起微妙的问题: 它也改变错误处理.
如果你在同步函数内抛出,它就会变成一个被拒绝的承诺,而不是同步例外.
只是当你真的有东西的时候 坑道5:忽略取消 Async/await没有内置取消.
如果您开始抓取, 而用户会导航离开, 您可能还会更新用户界面或泄露资源 。
一个简单的模式是使用: 对于更复杂的情景,像存在这样的库,但有时一个简单的旗下作品:Pitfall 6:忘记阻挡事件回路不会阻碍事件回路,但它确实暂停了功能.
如果在主动函数内有一个长期运行的同步操作,它会屏蔽其他一切.
对于CPU重任务,使用或工人线程产生控制.
最后提示 总是利用或履行你创造的每一个承诺。
优先处理部分故障。
用来暂停,但要小心 不处理的拒绝 从失去的承诺。
用规则将你的代码固定在缺失处(如ESLint).
Async/await是一个强大的工具,但不是魔法.
了解这些陷阱, 你会写一个更强健的同步代码。
编码愉快!