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
值?
警告:Node.js多線程並不意味着要這樣使用。爲了您的任務,異步下載會更有效率。嘗試'請求'模塊在foreach循環中下載。爲了更強大,你可以使用request-promise和bluebird模塊。 這個鏈接將幫助你,在循環中嘗試它:http://stackoverflow.com/a/11944984/3359432 –
@NidhinDavid我似乎無法找到這種方法有什麼不妥:從主進程卸載繁重的任務。你能否解釋一下如果我錯過了什麼,應該如何使用它? –
@ code-jaff Node.js中的多線程與其他編程語言不同。事實上,當你'多線程'其整個新的Node.js過程實例。你只能通過消息傳遞在它們之間進行通信。就Node.js而言,與IO相關的任務並不重。 Node.js正好適合這些類型的任務。如果這是一個圖像處理,那麼我會同意你的看法,即使那麼最好的選擇是在C++中創建一個'addon'而不是卸載。它提供了更多的控制。 –