【问题标题】:Handle event emitter messages sequentially按顺序处理事件发射器消息
【发布时间】:2020-04-14 12:18:28
【问题描述】:
myEmitter.on('data', handleData).

我怎样才能让handleData 按顺序而不是并行调用?

例如:n data 消息在时间上非常紧密地组合在一起,我希望它们按顺序的顺序处理,而不是并行处理。

我可以通过一些库轻松实现这一点吗?

注意:handleData 是异步的

【问题讨论】:

  • 你的“myEmitter”是 DOM 元素还是自写库?
  • 作为一个想法,您可以使用生成器函数并在之前完成后调用每个handleData

标签: javascript node.js asynchronous eventemitter


【解决方案1】:

如果您有像end 这样的附加事件,您就可以将每个数据项按照它们到达的顺序存储在一个数组中。 收到end事件后,可以依次处理之前存储的数据队列。

例子:

const dataQueue = [];
myEmitter.on('data', data => dataQueue.push(data));
myEmitter.on('end', () => dataQueue.forEach(handleData));

但是,您将无法在所有数据到达之前开始处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2012-12-26
    • 2014-05-18
    • 2019-03-02
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多