Ich benutze Node.js und Bluebird, um eine ziemlich komplizierte Logik zu erstellen, die das Dekomprimieren einer strukturierten Datei, das Analysieren von JSON, das Erstellen und Vornehmen von Änderungen an mehreren MongoDB-Dokumenten und das Schreiben verwandter Dateien an mehreren Speicherorten umfasst. Ich habe auch ziemlich komplizierte Fehlerbehandlung für alle diese abhängig von dem Zustand des Systems, wenn ein Fehler auftritt.Verwalten von Abhängigkeiten von Versprechen
Ich habe Schwierigkeiten, über einen guten Weg nachzudenken, Abhängigkeiten durch den Fluss von Versprechen zu verwalten.
Mein bestehender Code sieht im Grunde wie folgt:
var doStuff = function() {
var dependency1 = null;
var dependency2 = null;
promise1()
.then(function (value) {
dependency1 = value;
return promise2()
.then(function (value) {
dependency2 = value;
return promise3(dependency1)
.then(successFunction);
});
})
.catch(function (err) {
cleanupDependingOnSystemState(err, dependency1, dependency2);
});
};
Beachten Sie, dass abhaengigkeit1 nicht bis promise3 erforderlich ist, und dass die Fehler-Handler muss über die Abhängigkeiten kennen.
Für mich scheint dies wie Spaghetti-Code (und meine eigentliche Code ist viel schlimmer mit viel paralleler Kontrollfluss). Ich habe auch gelesen, dass das Zurückgeben eines anderen Versprechens innerhalb eines Callbacks ein Antipattern ist. Gibt es einen besseren/saubereren Weg, um das zu erreichen, was ich versuche?
Dies ist wahrscheinlich besser für Programmierer.stackexchange.com, um ehrlich zu sein, Mann. – 1252748
Hängt 'promise2' davon ab, dass' promise1' beendet ist? Der Code impliziert das, aber es ist ein wenig unklar. – loganfsmyth
Ja, jedes Versprechen, das später kommt, hängt von etwas ab, was ein früheres Versprechen gemacht hat/Daten, die es abgerufen hat. –