2017-10-13 3 views
0

J'ai vu un code qui ressemble à ceci (Pro Node). Il utilise la bibliothèque async.Que font les arguments de rappel dans la bibliothèque JS Async?

var async = require("async"); 
async.series([ 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 1"); 
     callback(null, 1); 
}, 300); }, 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 2"); 
     callback(null, 2); 
    }, 200); 
    }, 
    function(callback) { 
    setTimeout(function() { 
     console.log("Task 3"); 
     callback(null, 3); 
}, 100); } 
], function(error, results) { 
    console.log(results); 
}); 

Quand je lance, il montre:

Task 1 
Task 2 
Task 3 
[ 1, 2, 3 ] 

Tout va bien - cependant, je ne comprends pas tout à fait ce que les lignes de rappel sont: callback(null, 1), callback(null, 2) et callback(null, 3).

Si je supprime toutes ces lignes, quand je lance le code retourne seulement:

Task 1 

Qu'est-ce que les premier et deuxième arguments font et pourquoi sont les deuxièmes arguments 1, 2 et 3?

+0

Savez-vous quels rappels sont sans async.js? Savez-vous comment fonctionnent les rappels dans les fonctions du nœud natif? – Bergi

+0

@ Bergi, je ne suis pas familier. J'ai utilisé les rappels dans le passé quand 'fetch', mais je ne l'ai pas exploré. Je n'étais pas sûr si c'est une chose asynchrone ou une chose javascript plus large. – Iggy

+0

Dans ce cas, vous souhaiterez d'abord lire un didacticiel plus générique - il existe des dizaines de tutoriels sur le fonctionnement des callbacks dans nodejs - par ex. [celui-ci] (https://eloquentjavascript.net/20_node.html). Pour plus d'informations sur la raison pour laquelle les rappels de nœud ont deux paramètres, voir [cette question] (https://stackoverflow.com/q/40511513/1048572) – Bergi

Répondre

1

Dans la bibliothèque asynchrone, l'appel de la fonction de rappel de async.series exécute la fonction suivante dans le tableau. Le premier paramètre est toute donnée d'erreur. C'est une convention de nœud que les erreurs sont first parameter pour les fonctions de rappel. Le deuxième paramètre est les données de réussite et est passé au deuxième paramètre du rappel async.series en tant que tableau de toutes les données de réussite.

Voir this answer pour plus de détails sur la raison pour laquelle le nœud préfère les premiers rappels d'erreur.

+0

Awesome. Donc le premier argument = erreur, et le second est ce qu'il retourne. Très clair - je le comprends maintenant. Merci beaucoup!! – Iggy