首页 > 解决方案 > 在 Node/Express 服务器中使用 async/await 是个坏主意吗?

问题描述

我有一个 NodeJS/Express Web 应用程序,其中 TypeOrm 用于许多数据库功能。为了避免回调地狱,我通常使用async/await我的端点方法调用并等待数据库操作。
但是,我听说fs.readFileSync应该始终避免使用类似的方法,因为它们会阻塞并且会强制所有其他请求等待。这是否也适用于async/await?我是否必须使用承诺和回调来获得良好的多用户性能?

标签: node.jsexpressmodel-view-controllerasync-awaitsingle-threaded

解决方案


Sync函数确实阻塞了事件循环,直到 io 完成。但另一方面async-await,它只是 Promise 链接的语法糖。它实际上不是同步的,它只是看起来像它。这是您需要了解的最大区别。

async-await但是,由于承诺过于连续,会引入一些问题。

例如,两个独立的 Promise 应该并行执行Promise.all但是当你使用时async-await你倾向于做

await func1();
await func2();

因此,从逻辑上讲,您可能会自己制造瓶颈。但从语法上讲,它没有任何像 Sync 这样的问题。

您可以使用 Babel REPL 查看 ES5 转译,您可能会更好地理解一些。


推荐阅读