Async: Wie kann ich Funktionen mit unterschiedlichen Argumenten dynamisch in ein Array übertragen? Ich muss diese Funktionen mit Async.js (Parallel- oder Race-Modus) verarbeiten.

Erstellt am 8. Apr. 2016  ·  4Kommentare  ·  Quelle: caolan/async

Derzeit versuche ich, dieselbe Funktion mit verschiedenen Argumenten mit Node.JS parallel auszuführen

Dafür verwende ich Async.js und habe Schwierigkeiten, Funktionen in ein Array zu verschieben / zu stapeln.
Das Problem ist, dass die Funktionen mit den gleichen Argumenten ausgeführt werden. Das habe ich:

var async = require("async");
var array = [];
var x = [1,2,3,4];

// This portion of code works perfect and the arguments are passed perfectly
// The results that i am getting are: [100, 200, 300, 400]
array.push(function(callback){ callback(null,calculate(x[0]))});
array.push(function(callback){ callback(null,calculate(x[1]))});
array.push(function(callback){ callback(null,calculate(x[2]))});
array.push(function(callback){ callback(null,calculate(x[3]))});

// This portion of code does not work and I dont know why ... 
// The results that i am getting are: [400, 400, 400, 400]
// Obviusly the function is receiving the same argument a=4 everytime is called
for (i=0;i<3;i++){
    array.push(function(callback){ callback(null,calculate(x[i]))});
}

async.parallel(array,function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});


function calculate(a) {
  return a*100
}

Irgendeine Idee?
Vielen Dank

question

Hilfreichster Kommentar

Vieles hier, einschließlich grundlegender JS-Scoping-Macken. Die kurze Antwort auf Ihre Frage ist, dass Sie async.map , es läuft auch parallel:

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

Aber die wahre Antwort ist, dass Sie Async überhaupt nicht brauchen:

var result = [1, 2, 3, 4].map(calculate)

Alle 4 Kommentare

Vieles hier, einschließlich grundlegender JS-Scoping-Macken. Die kurze Antwort auf Ihre Frage ist, dass Sie async.map , es läuft auch parallel:

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

Aber die wahre Antwort ist, dass Sie Async überhaupt nicht brauchen:

var result = [1, 2, 3, 4].map(calculate)

Vielen Dank ...

von meinem Iphone gesendet

Am 7. April 2016 um 19:42 schrieb Alex Early [email protected] :

Vieles hier, einschließlich grundlegender JS-Scoping-Macken. Die kurze Antwort auf Ihre Frage lautet, dass Sie async.map verwenden können, es läuft auch parallel:

async.map([1, 2, 3, 4], Funktion(x, Rückruf){
Rückruf(null,berechnen(x))
}, Funktion(Fehler,Ergebnis){
wenn (fehler) {
Konsole.log(err);
Rückkehr;
}
console.log("Ergebnisse sind: " + Ergebnis);
});
Aber die wahre Antwort ist, dass Sie Async überhaupt nicht brauchen:

var result = [1, 2, 3, 4].map(berechnen)

Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an

Hallo Caolan,
Vielen Dank für die Hilfe, es hat perfekt funktioniert, aber ich würde gerne wissen, wie ich den "Race"-Modus implementieren kann.
Ich habe es schon mehrmals versucht und bekomme Fehler.
Ich möchte nur alle meine Funktionen parallel ausführen und das Ergebnis dessen erhalten, wer zuerst fertig ist.
Irgendeine Idee zur Implementierung von Async.race?
Grüße,
Alfredo Borrero
Datum: Do, 7. April 2016 18:42:25 -0700
Von: [email protected]
An: [email protected]
CC: [email protected]
Betreff: Re: [caolan/async] Wie kann ich Funktionen mit unterschiedlichen Argumenten dynamisch in ein Array übertragen? Ich muss diese Funktionen mit Async.js (Parallel- oder Race-Modus) verarbeiten (#1104)

Vieles hier, einschließlich grundlegender JS-Scoping-Macken. Die kurze Antwort auf Ihre Frage lautet, dass Sie async.map verwenden können, es läuft auch parallel:

async.map([1, 2, 3, 4], Funktion(x, Rückruf){
Rückruf(null,berechnen(x))
}, Funktion(Fehler,Ergebnis){
wenn (fehler) {
Konsole.log(err);
Rückkehr;
}
console.log("Ergebnisse sind: " + Ergebnis);
});

Aber die wahre Antwort ist, dass Sie Async überhaupt nicht brauchen:

var result = [1, 2, 3, 4].map(berechnen)


Sie erhalten dies, weil Sie den Thread verfasst haben.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an

Hallo Caolan,

Vielen Dank für die Hilfe, es hat perfekt funktioniert, aber ich würde gerne wissen, wie ich den "Race"-Modus implementieren kann. Ich habe es schon mehrmals versucht und bekomme Fehler.
Ich möchte nur alle meine Funktionen parallel ausführen und das Ergebnis dessen erhalten, wer zuerst fertig ist.
Irgendeine Idee zur Implementierung von Async.race?

Grüße,

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen