Vraag eindelijk blokkeren in hoekige 2 belofte


Ik merk op dat er in hoek 2 geen definitief blok voor de belofte-API is

hoek 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;
};

Ervan uitgaande dat ik hetzelfde moet doen in hoek 2

Hoe toe te voegen eindelijk blokkeren in hoekige 2 belofte, vanaf nu zijn er alleen then & catch blocks beschikbaar in hoekig 2. Als er uiteindelijk geen manier is om opruimcode toe te voegen na uitvoering van elke methode, waar schrijf ik dan code om activiteiten definitief te blokkeren?


13
2017-11-16 21:41


oorsprong


antwoorden:


De gemakkelijkste manier om dit te doen is om de Beloof het. Tenminste shim.

  • Voeg het toe met npm install --save promise.prototype.finally
  • Voeg de types toe: npm install --save-dev @types/promise.prototype.finally
  • Voeg in de hoofdklasse de volgende code toe voordat u de toepassing bootstrapt:
import { shim } from 'promise.prototype.finally';
shim();

Je zou nu in staat moeten zijn om te gebruiken finally op uw beloften.


14
2017-12-14 15:51



Dit gebeurt meestal met behulp van Promise.always. Dit kost één functie en voegt een nieuwe toe .then op de belofte die dezelfde functie geeft voor zowel succes- als faaltoestanden. Als de functie niet beschikbaar is in de gegeven belofte-gebaseerde omgeving, is het vrij eenvoudig om in te vullen.

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

gebruik:

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

1
2017-11-16 22:07