防止EventEmitter触发多个排队事件
我有一个MyWorker
类的两个实例。 我将这些对象的start
方法绑定到start
事件。 还有一些要处理的项目。 我将一个项目分配给每个对象,并emit
start
事件。
for (i = 0; i < objs.length; i += 1) { objs[i].item = items.shift(); } self.emit('start');
启动方法有一些asynchronousIO作业,所以一切工作正常。 处理done
后,对象发出done
事件。 done
方法检查items.length > 0
。 如果是,则将下一个项目分配给相同的对象并发出start
事件。
MyClass.prototype.done = function (data) { var self = this; data.object.item = items.shift(); self.emit('start'); }
现在,考虑一个IO等待时间很less的事件,或者事件没有IO操作的情况。 全部同步。 在这种情况下,即使在下一个对象start
事件之前, done
事件也会被触发。 done
将分配新的对象,并再次发射start
。 这是造成这个问题的原因。 第二个对象的start
现在将被调用两次。
任何想法如何解决这个问题?