Bluebird propose une méthode finally
appelée tout ce qui se passe dans votre chaîne de promesse. Je le trouve très pratique pour le nettoyage (déverrouiller une ressource, cacher un chargeur, ...)
Existe-t-il un équivalent dans les promesses natives ES6?
À partir du 7 février 2018
Prise en charge de Chrome 63+, Firefox 58+ et Opera 50+ Promise.finally
.
Dans Node.js 8.1.4+ (V8 5.8+), la fonctionnalité est disponible derrière le drapeau --harmony-promise-finally
.
La proposition ECMAScript Promise.prototype.finally est actuellement en phase étape du processus TC39.
En attendant, avoir la fonctionnalité promise.finale dans tous les navigateurs; vous pouvez ajouter un then()
supplémentaire après le catch()
pour toujours invoquer ce rappel .
Exemple:
_myES6Promise.then(() => console.log('Resolved'))
.catch(() => console.log('Failed'))
.then(() => console.log('Always run this'));
_
Démo JSFiddle: https://jsfiddle.net/9frfjcsg/
Ou vous pouvez étendre le prototype pour inclure une méthode finally()
(non recommandée):
_Promise.prototype.finally = function(cb) {
const res = () => this;
const fin = () => Promise.resolve(cb()).then(res);
return this.then(fin, fin);
};
_
Démo JSFiddle: https://jsfiddle.net/c67a6ss0/1/
Il y a aussi la bibliothèque de shim Promise.prototype.finally .