如何使用事件发射器接收多个同类型的事件?

时间:2018-07-26 05:39:09

标签: javascript node.js eventemitter

我正在使用Mocha框架编写测试用例。我不得不编写其中要接收多个同类型事件并对照期望值检查所有事件值的测试用例。我正在使用EventEmitter发出事件,但我不这样做不知道如何一次累积一个以上的事件,然后在一个上下文中检查所有值。

如何使用eventEmitter或通过任何其他方式聚合/累积事件?

1 个答案:

答案 0 :(得分:1)

您可以只创建一个空数组来保存发出的值,并且每当发出新事件时,将其推入数组并检查其长度。当数组长度等于所需的事件数时,请执行所需的所有检查。如果您需要在多个测试中使用该功能,则可以将其提取到单独的功能中。在以下示例中查看collect函数:

// waits for specified number of events and then resolves with the results
function collect(emitter, event, count) {
    const results = [];

    return new Promise((resolve, reject) => {
        emitter.on(event, value => {
            results.push(value);
            if (results.length === count) {
                 return resolve(results);
            }
        })
    })
}

describe('EventEmitter', function() {
    it('emits 3 ping events', function() {
        const emitter = new EventEmitter();

        setTimeout(() => {
            emitter.emit('ping', 'pong');
            emitter.emit('ping', 'pong');
            emitter.emit('ping', 'pong');
        }, 10)

        return collect(emitter, 'ping', 3).should.eventually.eql(['pong', 'pong', 'pong']);
    })
})