Isa*_*sov 5 model-view-controller single-threaded node.js express async-await
我有一个 NodeJS/Express Web 应用程序,其中 TypeOrm 用于许多数据库功能。为了避免回调地狱,我通常使用async/await我的端点方法调用并等待数据库操作。
但是,我听说fs.readFileSync应该始终避免使用此类方法,因为它们会阻塞并强制所有其他请求等待。这也适用于async/await? 我是否必须使用承诺和回调来获得不错的多用户性能?
不应该使用函数的原因*Sync是它们会阻塞事件循环。这会导致您的应用程序在执行同步函数时变得无响应。
当您处理异步代码时,Promise 可以帮助您避免回调地狱问题。此外,async/await语法允许您编写看起来像同步代码的异步代码。所以使用async和await就完全没问题了。
Sync函数真正阻塞事件循环,直到 io 完成。但另一方面async-await只是 Promise 链的语法糖。它实际上不是同步的,它只是看起来像。这是您需要了解的最大区别。
但是,async-await使承诺过于连续会引入一些问题。
例如,两个独立的promise应该并行执行Promise.all但是当你使用async-await你倾向于做
await func1();
await func2();
Run Code Online (Sandbox Code Playgroud)
因此,从逻辑上讲,您可能会自己制造瓶颈。但在语法上它没有像同步那样的任何问题。
你可以用 Babel REPL 看看 ES5 转译,你可能会更好理解一点。