我正在阅读eventEmitter文档,并看到他们讨论异步与同步代码的部分。下面的例子展示了如何异步处理一个事件:
const myEmitter = new MyEmitter();
myEmitter.on('event', (a, b) => {
setImmediate(() => {
console.log('this happens asynchronously');
});
});
我的问题是:使用async
关键字不会实现同样的事情吗?
下面的实现不是也异步运行吗?
const myEmitter = new MyEmitter();
myEmitter.on('event', async () => {
console.log('does this happens asynchronously????');
});
如果你告诉我们为什么你认为它们是相同的,可能会有所帮助。
第二个函数将在事件上执行,即使它被标记为async(它只会返回一个不会在任何地方使用的承诺)。
第一个也将在事件上执行,但将其内部内容(传递给setImmediate
的函数)安排在事件队列为空时运行。
async
不代表"以后再做";它的意思是"自动将我的返回包在一个承诺中,并允许我在函数体中使用await
"。