2016-04-07 10 views
1

は現在、私は私がAsync.jsを使用Node.jsのこのため配列に対して異なる引数を持つforループ、プッシュ関数を動的に使用するにはどうすればよいですか?

を使用して並列に異なる引数と同じ機能を実行しようとしていると私は、アレイに/スタック機能をプッシュしようとして苦労しています。問題は、関数が同じ引数で実行されることです。これは私が持っているものです:

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 
} 

何が悪いのアイデア? おかげ

答えて

1

はこれを試して、それが閉鎖の問題

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

letは何が必要です。

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

私は、トランスファーを使用していたかどうかはわかりませんでしたが、「はい」も良い方法です。 –

関連する問題