JavaScript:作为承诺解决下一个事件

JavaScript:作为承诺解决下一个事件,javascript,node.js,events,promise,mocha.js,Javascript,Node.js,Events,Promise,Mocha.js,为了测试的目的,我想以某种方式将事件包装成承诺(在摩卡等待承诺决议更容易)。所以,我写了这样的东西: const collectEvents = (eventEmmiter, eventName, count=1) => { return new Promise((resolve) => { const result = [] const listener = (msg) => { result.push(msg) if(result

为了测试的目的,我想以某种方式将事件包装成承诺(在摩卡等待承诺决议更容易)。所以,我写了这样的东西:

const collectEvents = (eventEmmiter, eventName, count=1) => {
  return new Promise((resolve) => {
    const result = []
    const listener = (msg) => {
      result.push(msg)
      if(result.length === count) {
        resolve(result)
        eventEmmiter.removeListener(eventName, listener)
      }
    }
    eventEmmiter.on(eventName, listener)
  })
}
然后像这样使用它:

Promise.all([
  collectEvents(client1, 'message'),
  collectEvents(client2, 'message')
]).then(

它能工作,但我觉得我又发明了轮子。是吗?是否有标准的方法来实现该行为

我会添加一个
eventEmitter.on(“error”,reject)
(以及相应的
removeListener
),但除此之外,它看起来完全没有问题。不,标准库还没有提供这样的实用程序。在这种特殊情况下,客户端提供了一个“错误”事件;但是一般来说,没有关于“错误”事件的规范,尽管到目前为止我看到的所有标准流都提供了一个错误事件。当然,它没有被编码,这就是为什么也没有标准的Promission实用程序的原因——每个人都需要它表现出一点不同。还要考虑流在发出<代码>计数< /COD>事件之前结束的情况。那么您想拒绝吗?>您想拒绝吗?这也是一个我不想回答的问题:)我使用这个函数进行测试。所以,在这种情况下,我依赖于摩卡咖啡的暂停时间