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