Async: Comment puis-je envoyer dynamiquement des fonctions avec différents arguments à un tableau ? J'ai besoin de traiter ces fonctions en utilisant Async.js (mode parallèle ou course)

Créé le 8 avr. 2016  ·  4Commentaires  ·  Source: caolan/async

Actuellement, j'essaie d'exécuter en parallèle la même fonction avec différents arguments en utilisant Node.JS

Pour cela, j'utilise Async.js et j'ai du mal à essayer de pousser/empiler des fonctions dans un tableau.
Le problème est que les fonctions sont exécutées avec les mêmes arguments. Voilà ce que j'ai :

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
}

Une idée?
Merci

question

Commentaire le plus utile

Beaucoup de choses ici, y compris les bizarreries de base de la portée variable JS. La réponse courte à votre question est que vous pouvez utiliser async.map , il fonctionne également en parallèle :

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

Mais la vraie réponse est que vous n'avez pas du tout besoin d'Async :

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

Tous les 4 commentaires

Beaucoup de choses ici, y compris les bizarreries de base de la portée variable JS. La réponse courte à votre question est que vous pouvez utiliser async.map , il fonctionne également en parallèle :

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

Mais la vraie réponse est que vous n'avez pas du tout besoin d'Async :

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

Merci beaucoup ...

Envoyé de mon iPhone

Le 7 avril 2016 à 19h42, Alex Early [email protected] a écrit :

Beaucoup de choses ici, y compris les bizarreries de base de la portée variable JS. La réponse courte à votre question est que vous pouvez utiliser async.map, il fonctionne également en parallèle :

async.map([1, 2, 3, 4], function(x, rappel){
rappel(null,calculer(x))
}, fonction(erreur,résultat){
si (erreur) {
console.log(err);
revenir;
}
console.log("Les résultats sont : " + résultat);
});
Mais la vraie réponse est que vous n'avez pas du tout besoin d'Async :

var result = [1, 2, 3, 4].map(calculer)
-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail ou consultez-le sur GitHub

Salut Caolan,
Merci beaucoup pour l'aide, cela a parfaitement fonctionné, cependant j'aimerais savoir comment je peux implémenter le mode "course".
J'ai déjà essayé plusieurs fois et j'obtiens des erreurs.
Je veux juste exécuter toutes mes fonctions en parallèle et obtenir le résultat de celui qui termine en premier.
Une idée sur la façon d'implémenter Async.race ?
Salutations,
Alfredo Borrero
Date : jeu. 7 avril 2016 18:42:25 -0700
De : [email protected]
À : [email protected]
CC : [email protected]
Objet : Re : [caolan/async] Comment puis-je envoyer dynamiquement des fonctions avec différents arguments à un tableau ? J'ai besoin de traiter ces fonctions en utilisant Async.js (mode parallèle ou course) (#1104)

Beaucoup de choses ici, y compris les bizarreries de base de la portée variable JS. La réponse courte à votre question est que vous pouvez utiliser async.map, il fonctionne également en parallèle :

async.map([1, 2, 3, 4], function(x, rappel){
rappel(null,calculer(x))
}, fonction(erreur,résultat){
si (erreur) {
console.log(err);
revenir;
}
console.log("Les résultats sont : " + résultat);
});

Mais la vraie réponse est que vous n'avez pas du tout besoin d'Async :

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

-
Vous recevez ceci parce que vous avez créé le fil.
Répondez directement à cet e-mail ou consultez-le sur GitHub

Salut Caolan,

Merci beaucoup pour l'aide, cela a parfaitement fonctionné, cependant j'aimerais savoir comment je peux implémenter le mode "course". J'ai déjà essayé plusieurs fois et j'obtiens des erreurs.
Je veux juste exécuter toutes mes fonctions en parallèle et obtenir le résultat de celui qui termine en premier.
Une idée sur la façon d'implémenter Async.race ?

Salutations,

Cette page vous a été utile?
0 / 5 - 0 notes