防止EventEmitter触发多个排队事件

时间:2013-07-01 09:27:54

标签: javascript node.js events eventemitter

我有两个类MyWorker的实例。我将这些对象的start方法绑定到start事件。并且有一系列要处理的项目。我为每个对象分配了一个项目,并为emit事件分配了start

for (i = 0; i < objs.length; i += 1) {
  objs[i].item = items.shift();
}

self.emit('start');

start方法中有一些异步IO作业,所以一切正常。处理完对象后,会发出done个事件。 done方法检查items.length > 0是否为start。如果是,则将下一个项目分配给同一个对象并发出MyClass.prototype.done = function (data) { var self = this; data.object.item = items.shift(); self.emit('start'); } 事件。

done

现在,考虑一下IO等待时间非常短或无IO操作的情况。一切都是同步的。在这种情况下,即使在下一个对象发生start事件之前,也会触发done事件。 start将分配新对象并再次发出start。这就是造成问题的原因。现在将调用第二个对象的{{1}}两次。

知道如何解决这个问题吗?

0 个答案:

没有答案