2016-11-05 4 views
0

Ich habe diesen Download-Manager, der Dateien von queue[] in einem separaten untergeordneten Prozess wget donwload.Behandlung mehrerer untergeordneter Prozesse in node.js

Allerdings, nachdem der Download abgeschlossen ist und der Rückruf aufgerufen wird, muss ich queue[i] behandeln, aber ich weiß nicht, welcher Warteschlangenindex es ist.

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); 

Wie erhalte ich den i Wert, nachdem der Vorgang abgeschlossen ist?

+0

WARNUNG: Node.js Multithreading ist nicht dazu gedacht, so verwendet zu werden. Für Ihre Aufgabe wäre das asynchrone Herunterladen effizienter. Versuchen Sie das "Anfrage" -Modul zum Herunterladen in einer foreach-Schleife. Um robuster zu sein, können Sie Anfrage-Versprechen zusammen mit Bluebird-Modul verwenden. Dieser Link wird Ihnen helfen, versuchen Sie es in einer Schleife: http://StackOverflow.com/a/11944984/3359432 –

+1

@NidhinDavid Ich kann nicht scheinen, etwas falsch mit diesem Ansatz zu finden: Offload schwere Aufgaben aus dem Hauptprozess . Könntest du ein bisschen erklären, wie es benutzt werden sollte, wenn ich etwas verpasse? –

+0

@ code-jaff Multithreading in Node.js ist nicht wie andere Programmiersprachen. Infact, wenn Sie die spnaning- und die gesamte neue Instanz von Node.js verarbeiten. Sie können nur zwischen ihnen kommunizieren, indem Sie Nachrichten weitergeben. Und soweit Node.js betroffen ist IO-bezogene Aufgaben nicht schwer. Node.js ist genau für diese Art von Aufgaben geeignet. Wenn es eine Bildverarbeitung wäre, dann würde ich Ihnen zustimmen, selbst dann ist die beste Option, ein 'Addon' in C++ zu erstellen, anstatt es zu entladen. es gibt mehr Kontrolle. –

Antwort

1

Javascript-Funktionen sind closures. Sie haben also bereits die Variable i im Funktionskörper.

Verwandte Themen