我正在寻找一种方法来了解何时发出event
并且所有处理程序都已完成解雇。
以下代码记录以下内容:
after do something
undefined
do something one
do something two
我正在寻找的是这样的:
do something one
do something two
after do something
undefined
以下是代码:
import Promise from 'bluebird'
import { EventEmitter } from 'events'
let event = new EventEmitter()
let doSomethingOne = Promise.resolve().then(() => console.log('do something one'))
let doSomethingTwo = Promise.resolve().then(() => console.log('do something two'))
event.on('myEvent', async function () {
return await doSomethingOne()
})
event.on('myEvent', async function () {
return await doSomethingTwo()
})
async function main() {
event.emit('myEvent', {'name': 'tom'})
// await event.finalized('myEvent')
console.log('after do something')
}
main()
.then(console.log)
.catch(console.error.bind(console))
在事件,承诺或整个javascript中是否有一个想法可以让你获得回调/承诺/等待所有异步事件处理程序?
像这样:
await event.finalized('myEvent')
注意我知道在async函数中没有真正需要等待一个promise。这只是为了表明这些事件处理程序是异步的。
答案 0 :(得分:0)
我刚刚创建了一个节点模块event-as-promised
,允许您await
/ .then()
.emit()
处理程序。
let event = new EventAsPromised()
event.on('customerAdd', (data) => {
let status = {'added': true}
return Promise.resolve(status).delay(100)
})
event.emit('customerAdd', {'name': 'Thomas'})
.then(data => {
console.log(data) // => [{'added': true}]
})