Rolf b: Promises & Callbacks

Beitrag lesen

Kann man das finally nicht durch ein weiteres .then und geschickte Rückgaben aus den ersten beiden Handlern abbilden?

getPromise()                                  // liefert P1
.then(function(promisedValue) {                  // then-Handler
   // process value, with possible exception  
   return true;
})                                            // liefert P2
.catch(function(failReason) {                    // catch-Handler
   // handle failure
   return false;
})                                            // liefert P3
.then(function(thenOrCatch) {                    // finally-Handler
   // do common stuff
});

Fall 1:
Das Promise P1 wird erfüllt und liefert den promisedValue. Dieser wird an den then-Handler übergeben und verarbeitet.

Fall 1a: Die Verarbeitung gelingt und es wird keine Exception geworfen. Dann wird der then-Handler mit true verlassen und P2 wird erfüllt. Da für P2 kein then-Handler vorgesehen ist, erfüllt sich P3 automatisch auch und der finally-Handler wird mit thenOrCatch=true aufgerufen

Fall 1b: Die Verarbeitung gelingt nicht, eine Exception wird geworfen. Dadurch wird P2 gebrochen und der catch-Handler wird aufgerufen. Die Exception bekommt er als Parameter. Der Catch-Handler liefert false zurück, wodurch P3 sich erfüllt und finally-Handler läuft mit thenOrCatch=false an

Fall 2: Das Promise P1 wird gebrochen. Da P1.then keinen Catch-Handler hat, bricht P2 automatisch, der catch-Handler für P2 läuft an, gibt false zurück und erfüllt damit P3. Auch jetzt läuft der finally-Handler an.

Rolf