Je viens de commencer à utiliser node, et une chose que j'ai rapidement remarquée est la rapidité avec laquelle les rappels peuvent atteindre un niveau stupide d'indentation:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
Le guide de style officiel dit de mettre chaque rappel dans une fonction distincte, mais cela semble trop restrictif sur l'utilisation des fermetures et de rendre disponible un seul objet déclaré au niveau supérieur plusieurs couches, car l'objet doit être traversé par tous les rappels intermédiaires.
Est-il correct d'utiliser l'étendue des fonctions pour aider ici? Mettez toutes les fonctions de rappel qui ont besoin d'accéder à un objet global-ish à l'intérieur d'une fonction qui déclare cet objet, donc il va dans une fermeture?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
et ainsi de suite pour plusieurs couches supplémentaires ...
Ou existe-t-il des cadres, etc. pour aider à réduire les niveaux d'indentation sans déclarer une fonction nommée pour chaque rappel unique? Comment gérez-vous la pyramide des rappels?