wake-up-neo.com

zum Schluss in Winkel 2 versprechen

Ich stelle fest, dass es in eckig 2 keine endgültige Blockierung für die Versprechen-API gibt

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

Angenommen, ich muss dasselbe in Winkel 2 tun

Wie füge ich endlich einen Block in eckig 2 hinzu, jetzt gibt es nur noch then & catch blocks in eckig 2. Wenn nicht zuletzt, gibt es eine Möglichkeit, Bereinigungscode nach der Ausführung jeder Methode hinzuzufügen. Wo schreibe ich Code, um Aktivitäten zu blockieren? ?

14
Dmehro

Der einfachste Weg, dies zu tun, ist die Verwendung von promise.finally shim .

  • Füge es mit npm install --save promise.prototype.finally hinzu
  • Fügen Sie die Typisierungen hinzu: npm install --save-dev @types/promise.prototype.finally
  • Fügen Sie in Ihrer Hauptklasse vor dem Bootstrapping der Anwendung den folgenden Code hinzu:
import { shim } from 'promise.prototype.finally';
shim();

Sie sollten jetzt finally in Ihren Versprechen verwenden können.

16
Tom Spencer

Dies wird normalerweise mit Promise.always durchgeführt. Dies übernimmt eine Funktion und fügt dem Versprechen einen neuen .then hinzu, der dieselbe Funktion für den Status "Erfolg" und "Fehler" gibt. Wenn die Funktion in der angegebenen versprechungsbasierten Umgebung nicht verfügbar ist, ist es relativ einfach, sie zu füllen.

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

verwendungszweck:

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