Promise-Frage

BLR

Erfahrenes Mitglied
Hallo,
ich versuche gerade zu verstehen, wofür promises bei JavaScript gut sind.
Situation: Speichere Daten einer M:n Beziehung in der Datenbank.
Callbacks:
Normaleweise wären das drei verschachtelte Callbacks.
Pseudocode:

Code:
function speichere(function(data){
          modelA.save(function(data){
                  modelB.save(function(data){
                               modelC.save(function(data){
                                             if(modelA.isSaved && modelB.isSaved){
                                                    //speichere die Relation-Schlüsseln
                                             }
                                   },hisError);
                          }, yourError);
          }error);
}, myerror);

Hier speichere ich zuerst modelA. Wenn das gut geht, dann speichere modelB und wenn das gut geht, speichere modelC ab. Diese Vorgehensweise ist schwer lesbar und wartbar.
Wie könnte man das mit promisses umsetzen?
Damit das realistisch ist brauche ich jedesmal den primäre-Schlüssel von modelA und modelB und
eine Relation in modelC mit diesen beiden PK´s speichern zu können.

Danke im Voraus
 
Ungefähr so sieht es dann aus:
Javascript:
modelA.save().then(modelB.save).then(modelC.save).then(data => {
  if (modelA.isSaved && modelB.isSaved) {
    // ...
  }
}).catch(err => {
  console.log(err);
});
Den Zugriff auf den Zustand von modelA innerhalb eines (tiefen) Callbacks finde ich jedoch unsauber, ggf. handelst du dir so leicht Wettlaufbedingungen ein. Besser wäre es, diese Daten durchzureichen, dann müssten jedoch modelA.save() und modelB.save() auch isSaved jeweils in der Promise (im resolve Handler) zurückgeben.
 
Zurück