2016-11-05 126 views
0

我有這個下載管理器,它將分別在wget分隔的子進程中從queue[]上下載文件。在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-promise和bluebird模塊。 這個鏈接將幫助你,在循環中嘗試它:http://stackoverflow.com/a/11944984/3359432 –

+1

@NidhinDavid我似乎無法找到這種方法有什麼不妥:從主進程卸載繁重的任務。你能否解釋一下如果我錯過了什麼,應該如何使用它? –

+0

@ code-jaff Node.js中的多線程與其他編程語言不同。事實上,當你'多線程'其整個新的Node.js過程實例。你只能通過消息傳遞在它們之間進行通信。就Node.js而言,與IO相關的任務並不重。 Node.js正好適合這些類型的任務。如果這是一個圖像處理,那麼我會同意你的看法,即使那麼最好的選擇是在C++中創建一個'addon'而不是卸載。它提供了更多的控制。 –

回答

1

Javascript函數是closures。所以你已經有了函數體內的變量i。