防止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现在将被调用两次。

任何想法如何解决这个问题?