class のインスタンスが 2 つありますMyWorker
。start
これらのオブジェクトのメソッドをstart
イベントにバインドします。そして、処理するアイテムの配列があります。各オブジェクトとイベントemit
に1 つのアイテムを割り当てます。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');
}
ここで、IO 待機時間がほとんどない場合、または IO 操作が発生しない場合を考えてみましょう。すべてが同期的に進みます。この場合、done
次のオブジェクトがイベントを取得する前であっても、イベントが発生しstart
ます。はdone
新しいオブジェクトを割り当て、start
再び放出します。これが問題を引き起こします。start
2 番目のオブジェクトのが 2 回呼び出されるようになりました。
これに対処する方法はありますか?