2017-08-10 12 views
0

child_process 2つが終了したら機能を起動したいと思います。私は以下のように約束を使用するのではと思ったが、約束がこれをプリントアウトし2つの子プロセスがnodejsを解決したときを知る方法

let excelParserChildOnePromise = new Promise((resolveChild, rejectChild) => { 
    let excelParserChildOne = fork(excelParserTool); 

    excelParserChildOne.send(`${tempFilePositionOne}`); 
    excelParserChildOne.on('message', (excelArray) => { 
     console.log('child one resolved') 
     resolveChild(excelArray); 
    }) 
}); 

let excelParserChildTwoPromise = new Promise((resolveChild, rejectChild) => { 
    let excelParserChildTwo = fork(excelParserTool); 

    excelParserChildTwo.send(`${tempFilePositionTwo}`); 
    excelParserChildTwo.on('message', (excelArray) => { 
     console.log('child two resolved') 
     resolveChild(excelArray) 
    }) 
}); 


childPromises.push([excelParserChildOnePromise, excelParserChildTwoPromise]); 

Promise.all(childPromises).then(() => { 
    console.log('inside promise all'); 
}) 

解決される前に、私は両方のプロセスが終了したときに耳を傾けるにはどうすればよい

inside promise all 
child one resolved 
child two resolved 

を次Promise.allをトリガするようですか?

答えて

1

.push()を配列に含めるのは間違っています。約束事の単純な配列ではなく配列の配列を返します。そしてPromise.all()は間違った型のデータを取得します配列の)ので、それは約束を適切に待機しません:

それを修正するには、この行を変更:これに

childPromises.push([excelParserChildOnePromise, excelParserChildTwoPromise]); 

を:

childPromises.push(excelParserChildOnePromise, excelParserChildTwoPromise); 
+0

いや..とにかく感謝して – forJ

+0

を実現するために20分かかった... – forJ

関連する問題