Ich habe gerade angefangen, Node zu verwenden, und eine Sache, die mir schnell aufgefallen ist, ist, wie schnell sich Rückrufe zu einem albernen Einrückungsgrad aufbauen können:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
Der offizielle Styleguide besagt, dass jeder Rückruf in eine separate Funktion gestellt werden soll. Dies scheint jedoch die Verwendung von Verschlüssen zu stark einzuschränken und ein einzelnes Objekt, das in der obersten Ebene deklariert ist, mehrere Ebenen tiefer verfügbar zu machen, da das Objekt alle durchlaufen muss Zwischenrückrufe.
Ist es in Ordnung, den Funktionsumfang zu verwenden, um hier zu helfen? Fügen Sie alle Rückruffunktionen, die Zugriff auf ein globales Objekt benötigen, in eine Funktion ein, die dieses Objekt deklariert, damit es geschlossen wird.
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
und so weiter für mehrere weitere Schichten ...
Oder gibt es Frameworks usw., mit denen die Einrückungsstufen reduziert werden können, ohne für jeden einzelnen Rückruf eine benannte Funktion zu deklarieren? Wie gehen Sie mit der Rückrufpyramide um?