如何动态使用for循环,将具有不同参数的函数推送到数组?

时间:2016-04-07 23:20:52

标签: javascript arrays node.js parallel-processing async.js

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

知道什么是错的? 感谢

2 个答案:

答案 0 :(得分:1)

试试这个,这是一个关闭问题

for (i=0;i<3;i++){
   (function(i){
    array.push(function(callback){ callback(null,calculate(x[i]))});
   })(i)
}

答案 1 :(得分:1)

let就是您所需要的。

'use strict';
for (let i=0;i<3;i++){
    array.push(function(callback){ callback(null,calculate(x[i]))});
}