2016-11-05 23 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. Чтобы быть более надежным, вы можете использовать запрос-обещание вместе с модулем bluebird. Эта ссылка поможет, попробуйте в цикле: http://stackoverflow.com/a/11944984/3359432 –

+1

@NidhinDavid Я не могу найти ничего плохого в этом подходе: Разгрузка тяжелых задач из основного процесса , Не могли бы вы немного рассказать о том, как его использовать, если я что-то пропустил? –

+0

@ code-jaff Многопоточность в Node.js не похожа на другие языки программирования. Infact, когда вы «многопоточно» его spwaning и весь новый экземпляр процесса Node.js. Вы можете общаться только между ними, используя передачу сообщений. И что касается Node.js, задачи, связанные с IO, не являются тяжелыми. Node.js точно подходит для таких задач. Если бы это была обработка изображений, я бы согласился с вами, даже тогда лучшим вариантом является создание «аддона» в C++, а не разгрузка. он дает больше контроля. –

ответ

1

Функции Javascript: closures. Таким образом, у вас уже есть переменная i внутри тела функции.