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

How can i receive more than one event of same type using Event Emitter?

我正在使用 mocha 编写测试用例 framework.I 必须编写测试用例,其中我想接收多个相同类型的事件并根据预期检查所有事件值 value.I 我正在使用 EventEmitter发出事件,但我不知道如何一次累积多个事件,然后在一个上下文中检查所有值。

如何使用 eventEmitter 或任何其他方式 aggregated/accumulated 事件?

您可以只创建一个空数组来保存发出的值,每当发出新事件时,将其推送到数组并检查其长度。当数组长度等于您期望的事件数时,执行您需要的所有检查。如果您在多个测试中需要该功能,可以将其提取到一个单独的函数中。查看以下示例中的 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']);
    })
})