Async: 如何将具有不同参数的函数动态推送到数组? 我需要使用 Async.js(并行或竞赛模式)处理这些函数

创建于 2016-04-08  ·  4评论  ·  资料来源: caolan/async

目前我正在尝试使用 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
}

任何的想法?
谢谢

question

最有用的评论

这里有很多东西,包括基本的 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)

所有4条评论

这里有很多东西,包括基本的 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)

非常感谢你 ...

从我的iPhone发送

2016 年 4 月 7 日下午 7:42,Alex Early [email protected]写道:

这里有很多东西,包括基本的 JS 变量范围怪癖。 对您问题的简短回答是您可以使用 async.map,它也可以并行运行:

async.map([1, 2, 3, 4], function(x, callback){
回调(空,计算(x))
},函数(错误,结果){
如果(错误){
控制台日志(错误);
返回;
}
console.log("结果为:" + result);
});
但真正的答案是您根本不需要 Async:

var 结果 = [1, 2, 3, 4].map(计算)

您收到此消息是因为您创作了该线程。
直接回复此邮件或在 GitHub 上查看

嗨,曹兰,
非常感谢您的帮助,它运行良好,但是我想知道如何实现“比赛”模式。
我已经尝试了几次,但出现错误。
我只想并行运行我的所有函数,并得到谁先完成的结果。
关于如何实现 Async.race 的任何想法?
问候,
阿尔弗雷多·博雷罗
日期:2016 年 4 月 7 日星期四 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){
回调(空,计算(x))
},函数(错误,结果){
如果(错误){
控制台日志(错误);
返回;
}
console.log("结果为:" + result);
});

但真正的答案是您根本不需要 Async:

var 结果 = [1, 2, 3, 4].map(计算)


您收到此消息是因为您创作了该线程。
直接回复此邮件或在 GitHub 上查看

嗨,曹兰,

非常感谢您的帮助,它运行良好,但是我想知道如何实现“比赛”模式。 我已经尝试了几次,但出现错误。
我只想并行运行我的所有函数,并得到谁先完成的结果。
关于如何实现 Async.race 的任何想法?

问候,

此页面是否有帮助?
0 / 5 - 0 等级