Javascript 异步处理所有事件处理程序的方法?

Javascript 异步处理所有事件处理程序的方法?,javascript,events,promise,async-await,Javascript,Events,Promise,Async Await,我正在寻找一种方法来知道何时发出事件,并且所有处理程序都已完成触发 下面的代码记录了以下内容: 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 } f

我正在寻找一种方法来知道何时发出
事件
,并且所有处理程序都已完成触发

下面的代码记录了以下内容:

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')
注意,我知道在异步函数中不需要等待一个承诺。这只是为了说明这些事件处理程序是异步的


我刚刚创建了一个节点模块,它允许您等待
/
.then()
处理程序

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}]  
  })

请阅读,如果我理解正确,这可能是你要找的?然而,这似乎使代码更加同步(如生成器),因此如果您真的希望代码继续异步,那么这可能是不够的。请在github gulpjs/bach repo中查找gulp4的bach库。我相信这就是你想要的。它有.series和.parallel,你可以定制和嵌套任何你想要的.rxjs来拯救它!