Prevent multiple queued events from being triggered by EventEmitter

I have two instances of a class MyWorker. I bind the start method of these objects to the start event. And there is an array of items to be processed. I assign one item to each object and emit the start event.

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

self.emit('start');

The start method has some async IO job in it, so everything works fine. And after processing the object emits a done event. The done method checks if items.length > 0. If yes, it assigns the next item to the same object and emits the start event.

MyClass.prototype.done = function (data) {
  var self = this;

  data.object.item = items.shift();
  self.emit('start');
}

Now, consider a case where there is very little IO wait time, or event no IO operation. All goes synchronously. In this case, the done event will be fired even before the next object has got start event. The done will assign new object and emit start again. This is what creates the problem. The start of second object will now be called twice.

Any idea how to address this?