В настоящее время я пытаюсь запустить параллельно одну и ту же функцию с разными аргументами, используя Node.JS
Для этого я использую Async.js, и я изо всех сил пытаюсь передать функции / стек в массив.
Проблема в том, что функции выполняются с одинаковыми аргументами. Вот что у меня есть:
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
}
Есть идеи?
Спасибо
Здесь много всего, в том числе основные причуды области видимости переменных JS. Короткий ответ на ваш вопрос заключается в том, что вы можете использовать async.map
, он тоже работает параллельно:
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);
});
Но настоящий ответ заключается в том, что вам вообще не нужен Async:
var result = [1, 2, 3, 4].map(calculate)
Спасибо большое ...
отправлено из моего Айфона
7 апреля 2016 г. в 19:42 Alex Early [email protected] написал:
Здесь много всего, в том числе основные причуды области видимости переменных JS. Короткий ответ на ваш вопрос заключается в том, что вы можете использовать async.map, он тоже работает параллельно:
async.map ([1, 2, 3, 4], function (x, callback) {
обратный вызов (null, вычислить (x))
}, function (err, result) {
if (err) {
console.log (ошибка);
возвращение;
}
console.log ("Результаты:" + результат);
});
Но настоящий ответ заключается в том, что вам вообще не нужен Async:var result = [1, 2, 3, 4] .map (вычислить)
-
Вы получаете это, потому что вы являетесь автором темы.
Ответьте на это письмо напрямую или просмотрите его на GitHub
Привет, Каолан,
Большое спасибо за помощь, все сработало отлично, однако я хотел бы знать, как я могу реализовать режим "гонки".
Я уже пробовал несколько раз и получаю ошибки.
Я просто хочу запустить все свои функции параллельно и получить результат того, кто закончит первым.
Есть идеи, как реализовать Async.race?
С уважением,
Альфредо Борреро
Дата: 7 апреля 2016 г., 18:42:25 -0700
От: [email protected]
Кому: [email protected]
Копия: [email protected]
Тема: Re: [caolan / async] Как я могу динамически помещать функции с разными аргументами в массив? Мне нужно обработать эти функции с помощью Async.js (параллельный или гоночный режим) (# 1104)
Здесь много всего, в том числе основные причуды области видимости переменных JS. Короткий ответ на ваш вопрос заключается в том, что вы можете использовать async.map, он тоже работает параллельно:
async.map ([1, 2, 3, 4], function (x, callback) {
обратный вызов (null, вычислить (x))
}, function (err, result) {
if (err) {
console.log (ошибка);
возвращение;
}
console.log ("Результаты:" + результат);
});
Но настоящий ответ заключается в том, что вам вообще не нужен Async:
var result = [1, 2, 3, 4] .map (вычислить)
-
Вы получаете это, потому что вы являетесь автором темы.
Ответьте на это письмо напрямую или просмотрите его на GitHub
Привет, Каолан,
Большое спасибо за помощь, все сработало отлично, однако я хотел бы знать, как я могу реализовать режим "гонки". Я уже пробовал несколько раз и получаю ошибки.
Я просто хочу запустить все свои функции параллельно и получить результат того, кто закончит первым.
Есть идеи, как реализовать Async.race?
С уважением,
Самый полезный комментарий
Здесь много всего, в том числе основные причуды области видимости переменных JS. Короткий ответ на ваш вопрос заключается в том, что вы можете использовать
async.map
, он тоже работает параллельно:Но настоящий ответ заключается в том, что вам вообще не нужен Async: