我有两个类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}}两次。
知道如何解决这个问题吗?