【问题标题】:Async callback for EventEmitterEventEmitter 的异步回调
【发布时间】:2017-12-03 23:35:59
【问题描述】:
是否可以在 TypeScript 或 JavaScript 中为 EventEmitter 提供异步回调?
someEmitter.on("anEvent", async () => console.log("hello"));
这会导致函数异步运行吗?如果是这样,为什么不能在 EventEmitter 上使用异步函数?
【问题讨论】:
标签:
javascript
typescript
asynchronous
callback
promise
【解决方案1】:
是否可以在 TypeScript 或 JavaScript 中为 EventEmitter 提供异步回调?
是的,您可以为 eventEmitter 提供一个异步函数,这将允许您在回调中使用 await,但它不会神奇地使您的函数异步运行。
它也不会改变你的回调函数之外的任何东西。 eventEmitter 将在事件发生时调用您的回调。你的回调最终会返回一个承诺,即 eventEmitter 对象不会做任何事情。
因此,您可以这样做以便在回调函数中使用await(出于您自己的内部原因),但它不会更改回调之外的任何其他内容。它不会以任何方式改变 eventEmitter 处理其其余业务的方式。
这会导致函数异步运行吗?
没有。它不会改变调用函数的方式。如果你的函数完全由同步代码组成,它仍然会被同步调用和运行。
仅供参考,对于声明为async 的任何函数都是如此。这不会以任何方式改变函数的调用方式。它改变了你可以在函数内部做的一些事情,它强制函数返回一个承诺,但它不会改变函数的调用方式。同步代码仍然是同步代码,无论是在异步函数还是常规函数中。我真的建议您阅读更多关于异步函数实际上是什么的内容。