Ein promise ist eine Instanz (Objekt) der Promise Klasse (Konstruktor). Um ein Versprechen zu erstellen, verwenden wir die Syntax new Promise(executor) und stellen eine Executor-Funktion als Argument bereit. Diese Executor-Funktion bietet die Möglichkeit, das Verhalten unserer Promise-Auflösung oder -Ablehnung zu steuern.
In TypeScript können wir den Datentyp des Werts angeben, der zurückgegeben wird, wenn das Versprechen erfüllt wird. Da der vom Versprechen zurückgegebene Fehler jede Form annehmen kann, wird der Standarddatentyp des Werts, der zurückgegeben wird, wenn das Versprechen abgelehnt wird, vom TypeScript auf any .
Um den Auflösungswerttyp des Versprechens zu kommentieren, verwenden wir eine generische Typdeklaration. Grundsätzlich versprechen Sie einen Typ mit Promise Konstruktor in Form von new Promise<Type>() der den aufgelösten Werttyp des Versprechens angibt. Sie können aber auch die Syntax let p: Promise<Type> = new Promise() verwenden, um dasselbe zu erreichen.
💡 Wir haben Generika-Klassen in der Generika-Lektion ausführlich besprochen.
Im obigen Beispiel ist findEven ein Versprechen, das mit dem Promise Konstruktor erstellt wurde, der nach 1 Sekunde aufgelöst wird. Der aufgelöste Datentyp dieses Versprechens ist number , daher erlaubt Ihnen der TypeScript-Compiler nicht, resolve aufzurufen Funktion mit einem anderen Wert als einem Wert vom Typ number number.
Der Standardtyp des Ablehnungswerts des Versprechens ist any, daher ist das Aufrufen der reject -Funktion mit einem beliebigen Wert zulässig. Dies ist das Standardverhalten von TypeScript, und Sie können den Diskussionsthread hier finden, wenn Sie Ihre eigene Meinung haben.
Da wir den number als Datentyp für eine erfolgreiche Promise-Auflösung bereitgestellt haben, stellt der TypeScript-Compiler den number -Typ für das Argument der value -Argument der then -Rückrufmethode bereit.
Der in der then -Methode bereitgestellte Rückruf wird ausgeführt, wenn das Versprechen aufgelöst wird, und der in der catch -Methode bereitgestellte Rückruf wird ausgeführt, wenn er abgelehnt wird oder ein Fehler beim Auflösen des Versprechens. Die finally -Methode registriert einen Rückruf, der ausgeführt wird, wenn promise entweder aufgelöst oder abgelehnt wird.
Wenn sich der TypeScript-Compiler über die finally -Methode beschwert, bedeutet dies, dass Ihr TypeScript-Compiler keine Typdefinitionen für die finally -Methode importiert. Diese Methode wurde in ES2016 eingeführt und ist daher ziemlich neu. Stellen Sie daher sicher, dass in Ihrer tsconfig.json -Datei alle neuen Bibliotheken geladen sind.