Le module async nodejs: https://github.com/caolan/async fournit 2 méthodes similaires, async.waterfall
et async.series
.
Quelle est la différence entre eux?
javascript
node.js
asynchronous
node-async
Bruce Dou
la source
la source
waterfall
ni neseries
renvoie une valeur. Il est prévu que quel que soit le résultat, il sera utilisé dans le paramètre de rappel facultatif.Les deux fonctions passent la valeur de retour de chaque fonction à la suivante, puis une fois terminé, elle appellera le rappel principal, en passant son erreur, si une erreur se produit.
La différence est que
async.series()
, une fois la série terminée, transmettra tous les résultats au callback principal.async.waterfall()
transmettra au rappel principal uniquement le résultat de la dernière fonction appelée.la source
async.waterfall()
traite d'unaction that relies on the previous outcome
.async.series()
traite d'une action qui veutsee all the result at the end
la source
Je considère async.waterfall comme nuisible, car il est difficile à refactoriser une fois écrit et également sujet aux erreurs car si vous fournissez plus d'arguments, d'autres fonctions changent beaucoup la signature.
Je recommande vivement
async.autoInject
comme alternative à async.waterfall. https://caolan.github.io/async/autoInject.js.htmlSi vous choisissez d'utiliser async.waterfall, je vous recommande de tout stocker dans un seul objet, afin que vos fonctions n'aient pas à changer la longueur / les signatures, comme ceci:
avertissement: c'est un mauvais schéma
ne le faites pas de la manière ci-dessus. C'est un bien meilleur modèle à utiliser:
de cette façon, vous ne vous tirerez pas les cheveux en essayant de vous assurer que les arguments de la fonction ont la bonne longueur. La première fonction n'accepte qu'un seul argument - callback. Tous les autres doivent accepter deux arguments - une valeur et un rappel. Tenez-vous en au modèle et vous resterez sain d'esprit!
la source