2016-11-05 6 views
0

queue[]から別の子プロセスであるwgetのファイルをドローロードするこのダウンロードマネージャがあります。node.js内の複数の子プロセスの処理

しかし、ダウンロードが完了し、コールバックが呼び出された後、私はqueue[i]を処理する必要がありますが、どのキューインデックスがわからないのですか。

const EXEC_FILE = require('child_process').execFile; /** https://nodejs.org/api/child_process.html */ 

queue = []; /** array with download urls */ 

function startDownload(i){  
    var downloadProccess = EXEC_FILE(
     wget, [ queue[i] ], 
     (error, stdout, stderr) => { 

      /** callback after EXEC_FILE completed or aborted */ 
      /** HERE! How do I get the index i? */ 

    }); 
} 

startDownload(1); 
startDownload(3); 
startDownload(9); 

処理が完了した後にどのようにしてi値を取得しますか?

+0

警告:Node.jsマルチスレッドは、このように使用するものではありません。あなたの仕事では、非同期ダウンロードがより効率的です。 foreachループでダウンロードするための 'request'モジュールを試してください。より堅牢にするには、bluebirdモジュールと一緒にrequest-promiseを使用することができます。 このリンクは参考になるでしょう、ループでそれを試してください:http://stackoverflow.com/a/11944984/3359432 –

+1

@ NidhinDavid私はこのアプローチに間違ったものを見つけることができないようです:メインプロセスから重い作業をオフロードする。私が何かを欠けている場合、どのように使用すべきかについて少し説明できますか? –

+0

@ code-jaff Node.jsのマルチスレッドは他のプログラミング言語と似ていません。あなたがマルチスレッド化されたときに、Node.jsプロセスのspwanと完全なインスタンスが発生したときには、メッセージの受け渡しを使用して、それらの間でのみ通信することができます。そして、Node.jsに関する限り、IO関連のタスクは重くはありません。 Node.jsは、これらの種類のタスクのためのものです。それが画像処理なら、私はあなたに同意するだろう、そして最良の選択肢は、オフロードではなく、C + +で 'アドオン'を作成することです。それはより制御を与える。 –

答えて

1

Javascriptの機能はclosuresです。したがって、変数iはすでに関数本体の中にあります。

関連する問題