Actualmente estoy tratando de ejecutar en paralelo la misma función con diferentes argumentos usando Node.JS
Para esto, uso Async.js y estoy luchando tratando de empujar / apilar funciones a una matriz.
El problema es que las funciones se ejecutan con los mismos argumentos. Esto es lo que tengo:
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
}
¿Alguna idea?
Gracias
Un montón de cosas aquí, incluidas las peculiaridades básicas del alcance de las variables JS. La respuesta corta a su pregunta es que puede usar async.map
, también se ejecuta en paralelo:
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);
});
Pero la respuesta real es que no necesita Async en absoluto:
var result = [1, 2, 3, 4].map(calculate)
Muchas gracias ...
Enviado desde mi iPhone
El 7 de abril de 2016, a las 7:42 p.m., Alex Early [email protected] escribió:
Un montón de cosas aquí, incluidas las peculiaridades básicas del alcance de las variables JS. La respuesta corta a su pregunta es que puede usar async.map, también se ejecuta en paralelo:
async.map ([1, 2, 3, 4], function (x, callback) {
devolución de llamada (nulo, calcular (x))
}, función (err, resultado) {
si (err) {
console.log (err);
regresar;
}
console.log ("Los resultados son:" + resultado);
});
Pero la respuesta real es que no necesita Async en absoluto:var result = [1, 2, 3, 4] .map (calcular)
-
Estás recibiendo esto porque eres el autor del hilo.
Responda a este correo electrónico directamente o véalo en GitHub
Hola Caolan,
Muchas gracias por la ayuda, funcionó perfectamente, sin embargo me gustaría saber cómo puedo implementar el modo "carrera".
Ya lo intenté varias veces y recibo errores.
Solo quiero ejecutar todas mis funciones en paralelo y obtener el resultado de quien termine primero.
¿Alguna idea sobre cómo implementar Async.race?
Saludos,
Alfredo Borrero
Fecha: jue, 7 de abril de 2016 18:42:25 -0700
De: [email protected]
Para: [email protected]
CC: [email protected]
Asunto: Re: [caolan / async] ¿Cómo puedo enviar funciones dinámicamente con diferentes argumentos a una matriz? Necesito procesar esas funciones usando Async.js (modo paralelo o carrera) (# 1104)
Un montón de cosas aquí, incluidas las peculiaridades básicas del alcance de las variables JS. La respuesta corta a su pregunta es que puede usar async.map, también se ejecuta en paralelo:
async.map ([1, 2, 3, 4], function (x, callback) {
devolución de llamada (nulo, calcular (x))
}, función (err, resultado) {
si (err) {
console.log (err);
regresar;
}
console.log ("Los resultados son:" + resultado);
});
Pero la respuesta real es que no necesita Async en absoluto:
var result = [1, 2, 3, 4] .map (calcular)
-
Estás recibiendo esto porque eres el autor del hilo.
Responda a este correo electrónico directamente o véalo en GitHub
Hola Caolan,
Muchas gracias por la ayuda, funcionó perfectamente, sin embargo me gustaría saber cómo puedo implementar el modo "carrera". Ya lo intenté varias veces y recibo errores.
Solo quiero ejecutar todas mis funciones en paralelo y obtener el resultado de quien termine primero.
¿Alguna idea sobre cómo implementar Async.race?
Saludos,
Comentario más útil
Un montón de cosas aquí, incluidas las peculiaridades básicas del alcance de las variables JS. La respuesta corta a su pregunta es que puede usar
async.map
, también se ejecuta en paralelo:Pero la respuesta real es que no necesita Async en absoluto: