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);
});

しかし、本当の答えは、非同期はまったく必要ないということです。

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);
});

しかし、本当の答えは、非同期はまったく必要ないということです。

var result = [1, 2, 3, 4].map(calculate)

どうもありがとうございます ...

私のiPhoneから送信された

2016年4月7日には、19:42で、アレックス早期[email protected]書きました:

ここには、基本的なJS変数スコープの癖を含む多くのものがあります。 あなたの質問に対する簡単な答えは、async.mapを使用できるということです。それも並行して実行されます。

async.map([1、2、3、4]、function(x、callback){
コールバック(null、calculate(x))
}、function(err、result){
if(err){
console.log(err);
戻る;
}
console.log( "結果は次のとおりです:" +結果);
});
しかし、本当の答えは、非同期はまったく必要ないということです。

var result = [1、2、3、4] .map(calculate)

スレッドを作成したため、これを受け取っています。
このメールに直接返信するか、GitHubで表示してください

こんにちはカオラン、
助けてくれてありがとう、それは完璧に機能しました、しかし私は「レース」モードをどのように実装することができるか知りたいです。
すでに数回試しましたが、エラーが発生します。
すべての関数を並行して実行し、最初に終了した人の結果を取得したいだけです。
Async.raceを実装する方法について何かアイデアはありますか?
よろしく、
アルフレド・ボレロ
日付:2016年4月7日木曜日18:42:25 -0700
差出人: [email protected]
宛先: [email protected]
CC: [email protected]
件名:Re:[caolan / async]異なる引数を持つ関数を配列に動的にプッシュするにはどうすればよいですか? Async.js(パラレルモードまたはレースモード)を使用してこれらの関数を処理する必要があります(#1104)

ここには、基本的なJS変数スコープの癖を含む多くのものがあります。 あなたの質問に対する簡単な答えは、async.mapを使用できるということです。それも並行して実行されます。

async.map([1、2、3、4]、function(x、callback){
コールバック(null、calculate(x))
}、function(err、result){
if(err){
console.log(err);
戻る;
}
console.log( "結果は次のとおりです:" +結果);
});

しかし、本当の答えは、非同期はまったく必要ないということです。

var result = [1、2、3、4] .map(calculate)


スレッドを作成したため、これを受け取っています。
このメールに直接返信するか、GitHubで表示してください

こんにちはカオラン、

助けてくれてありがとう、それは完璧に機能しました、しかし私は「レース」モードをどのように実装することができるか知りたいです。 すでに数回試しましたが、エラーが発生します。
すべての関数を並行して実行し、最初に終了した人の結果を取得したいだけです。
Async.raceを実装する方法について何かアイデアはありますか?

よろしく、

このページは役に立ちましたか?
0 / 5 - 0 評価