Wie führe ich eine Javascript-Funktion erst aus, nachdem mehrere andere Funktionen abgeschlossen wurden?

Mein spezifisches Problem ist, dass ich eine (möglicherweise) große Anzahl von Javascript-Funktionen ausführen muss, um so etwas wie eine Batch-Datei vorzubereiten (jeder Funktionsaufruf fügt der gleichen Batch-Datei einige Informationen hinzu), und dann, nachdem alle diese Aufrufe abgeschlossen sind, a letzte Funktion zum Senden der Batch-Datei (z. B. als HTML-Antwort senden). Ich suche dafür ein allgemeines Javascript-Programmiermuster.

Problem verallgemeinern: Angesichts der Javascript-Funktionen funcA (), funcB () und funcC () würde ich den besten Weg finden, um die Ausführung so zu ordnen, dass funcC erst ausgeführt wird, nachdem funcA und funcB ausgeführt wurden. Ich weiß, dass ich geschachtelte Rückruffunktionen wie diese verwenden könnte:

funcA = function() {
    //Does funcA stuff
    funcB();
}
funcB = function() {
    //Does funcB stuff
    funcC();
}

funcA();

Ich könnte dieses Muster sogar etwas allgemeiner gestalten, indem ich Callback-Parameter übergebe. Diese Lösung ist jedoch recht ausführlich.

Ich bin auch mit der Verkettung von Javascript-Funktionen vertraut, bei denen eine Lösung wie folgt aussehen könnte:

myObj = {}
myObj.answer = ""
myObj.funcA = function() {
    //Do some work on this.answer
    return this;
}
myObj.funcB = function() {
    //Do some more work on this.answer
    return this;
}
myObj.funcC = function() {
    //Use the value of this.answer now that funcA and funcB have made their modifications
    return this;
}
myObj.funcA().funcB().funcC();

Während mir diese Lösung ein wenig übersichtlicher erscheint, wenn Sie der Berechnung weitere Schritte hinzufügen, wird die Kette der Funktionsausführungen immer länger.

Für mein spezielles Problem spielt die Reihenfolge, in der funca, funca usw. ausgeführt werden, keine Rolle. In meinen obigen Lösungen mache ich also technisch mehr Arbeit als erforderlich, da ich alle Funktionen in einer Serienbestellung platziere. Für mich ist nur wichtig, dass funcC (eine Funktion zum Senden des Ergebnisses oder Auslösen einer Anforderung) erst aufgerufen wird, nachdem funcA und funcB ALL die Ausführung abgeschlossen haben. Im Idealfall könnte funcC irgendwie darauf warten, dass alle Zwischenfunktionsaufrufe abgeschlossen sind und DANN ausgeführt werden? Ich hoffe, ein allgemeines Javascript-Muster zu erlernen, um ein solches Problem zu lösen.

Danke für Ihre Hilfe.

Eine andere Idee: Übergeben Sie ein gemeinsames Objekt möglicherweise an funcA und funcB und markieren Sie das gemeinsame Objekt nach Abschluss der Ausführung wie sharedThing.funcA = "complete" oder sharedThing.funcB = "complete" und dann irgendwie? Lassen Sie funcC ausführen, wenn das gemeinsam genutzte Objekt einen Zustand erreicht, in dem alle Felder als vollständig markiert sind. Ich bin mir nicht sicher, wie genau Sie funcC dazu bringen könnten, darauf zu warten.

Bearbeiten: Ich sollte beachten, dass ich serverseitiges Javascript (Node.js) verwende und ich möchte ein Muster lernen, um es einfach mit einfachem altem Javascript zu lösen (ohne die Verwendung von jQuery oder anderen Bibliotheken). Sicher ist dieses Problem allgemein genug, dass es eine saubere Lösung mit reinem Javascript gibt?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage