JavaScript Effectuer un nettoyage avec finally ()


Exemple

Il y a actuellement une proposition (pas encore partie de la norme ECMAScript) pour ajouter un finally rappel à des promesses qui seront exécutées indépendamment du fait que la promesse est remplie ou rejetée. Sémantiquement, cela est similaire à la clause finally du bloc try .

Vous utiliseriez généralement cette fonctionnalité pour le nettoyage:

var loadingData = true;

fetch('/data')
    .then(result => processData(result.data))
    .catch(error => console.error(error))
    .finally(() => {
        loadingData = false;
    });

Il est important de noter que le rappel finally n’affecte pas l’état de la promesse. Peu importe la valeur qu'il retourne, la promesse reste dans l'état satisfait / rejeté qu'elle avait auparavant. Ainsi, dans l'exemple ci-dessus, la promesse sera résolue avec la valeur de retour de processData(result.data) même si le rappel finally renvoyé n'est undefined .

Avec le processus de normalisation étant toujours en cours, vos promesses mise en œuvre le plus probable ne soutiendra finally Demandes de rappel de la boîte. Pour les rappels synchrones, vous pouvez toutefois ajouter cette fonctionnalité avec un polyfill:

if (!Promise.prototype.finally) {
    Promise.prototype.finally = function(callback) {
        return this.then(result => {
            callback();
            return result;
        }, error => {
            callback();
            throw error;
        });
    };
}