web-dev-qa-db-fra.com

enfin bloquer en promesse angulaire 2

J'observe que dans angular 2 il n'y a pas de bloc finalement pour promesse API

1 angulaire:

 loadUsers() {
  fetch('/api/users').then((response) => {
    return response.json();
  }).then((data) => {
    this.users = data;
  }).catch((ex) => {
    console.error('Error fetching users', ex);
  }).finally(() => {
     this.userLoaded = true;
};

En supposant que je doive faire la même chose dans angular 2

Comment ajouter finalement block in angular 2 promise, à partir de maintenant il n'y a que then & catch blocks disponible dans angular 2. Sinon, il n'y a aucun moyen d'ajouter du code de nettoyage après l'exécution de chaque méthode, où puis-je écrire du code pour bloquer les activités ?

14
Dmehro

Le moyen le plus simple consiste à utiliser le promise.finally shim .

  • Ajoutez-le avec npm install --save promise.prototype.finally
  • Ajoutez les saisies: npm install --save-dev @types/promise.prototype.finally
  • Dans votre classe principale, avant d'amorcer l'application, ajoutez le code suivant:
import { shim } from 'promise.prototype.finally';
shim();

Vous devriez maintenant pouvoir utiliser finally sur vos promesses.

16
Tom Spencer

Cela se fait généralement avec Promise.always. Cela prend une fonction et ajoute un nouveau .then sur la promesse qui donne la même fonction pour les états de succès et d'échec. Si la fonction n'est pas disponible dans l'environnement basé sur les promesses donné, il est assez facile d'effectuer la polyfillature.

Promise.always = function(p, fn) {
  return p.then(fn, fn);
}

usage:

var prom = fetch('/api/users').then...
Promise.always(prom, () => {
  this.userLoaded = true;
});
return prom;
1
Katana314