あなたの実行ロジックには多少の欠陥があります。代わりにこのようなことをする必要があります
var checklist = [];
// checklist will contain sort of a counter
function reader_end(){
if(checklist.length == 2 )
// doSomething only if both have been added to the checklist
doSomething();
}
reader1.on('end', function() {
checklist.push('reader1');
// increment the counter
reader_end();
});
reader2.on('end', function() {
checklist.push('reader2');
reader_end();
});
Async や Promises など、この種のものをより適切に処理するためのライブラリがあります。
Asyncでは、使用する必要がありますcompose
var r12_done = async.compose(reader1.on, reader2.on);
r12_done('end', function(){
doSomething();
});
編集:の標準コールバック引数シグネチャを持たないStream 'end' イベントreader1.on
である可能性が高いため、これはおそらく機能しないことに気付きました。その場合は、Promise を使用する必要があります。(err, results)
Promiseでは、最初にPromisifyしてから参加する必要があります
var reader1Promise = Promise.promisify(reader1.on)('end');
var reader2Promise = Promise.promisify(reader2.on)('end');
var reader12Promise = Promise.join(reader1Promise, reader1Promise);
reader12Promise.then(function(){
doSomething();
});