14 votes

finally block in angular 2 promise

J'observe que dans angular 2 il n'y a pas de bloc finally pour l'API promise.

angulaire 1 :

 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 le bloc finally dans la promesse angular 2, pour l'instant il n'y a que le bloc finally. then & catch blocks disponible dans angular 2. Si finally n'existe pas, y a-t-il un moyen d'ajouter du code de nettoyage après l'exécution de chaque méthode, où dois-je écrire le code pour faire des activités de finally block ?

15voto

fiznool Points 736

La façon la plus simple de le faire est d'utiliser la fonction promise.enfin cale .

  • Ajoutez-le avec npm install --save promise.prototype.finally
  • Ajouter les typages : npm install --save-dev @types/promise.prototype.finally
  • Dans votre classe principale, avant de démarrer l'application, ajoutez le code suivant :

    import { shim } from 'promise.prototype.finally'; shim();

Vous devriez maintenant être en mesure d'utiliser finally sur vos promesses.

1voto

Katana314 Points 1980

Pour ce faire, on utilise généralement Promise.always. Cela prend une fonction, et ajoute une nouvelle .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 donné basé sur la promesse, il est assez facile de l'intégrer dans le polyfill.

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

l'usage :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X