web-dev-qa-db-fra.com

Quel est l’équivalent de Bluebird Promise.finally dans les promesses ES6 natives?

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?

158
Aric Lasry

À 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 .

275
Miguel Mota