Was ist der Anwendungsfall von Promise.resolve (Versprechen)?

8

Wir können Promise.resolve(value) sowie Promise.resolve(promise) aufrufen. Ich kann verstehen, wo und wie ich den ersten Anruf verwenden sollte, bin mir aber über den zweiten nicht sicher.

Warum nicht einfach das Versprechen als Argument verwenden? Ich meine, rufen:

  

promise1.then ()

anstelle von:

  

Promise.resolve (promise1) .then ()

?

    
Sami1202 04.08.2016, 17:39
quelle

3 Antworten

5

Promise.resolve ist im Grunde genommen "Es ist mir egal, was das ist, gib mir ein Versprechen". Im Allgemeinen, wann immer du ein Argument bekommst, dass könnte eine Verheißung sein Promise.resolve ist der richtige Weg, damit zu arbeiten (vs. Erkennen, dass es ein Versprechen ist).

Es ist nützlich für:

  • Arbeiten mit ausländischen Versprechen von verschiedenen Bibliotheken.
  • Arbeiten mit Werten, die Versprechen sein könnten und einfache Werte sein könnten.

Es ist auch implizit genannt viel mit Versprechen.

  • Wenn Sie ein Array gemischter Versprechen, fremder "thenables" und Werte an Promise.all oder Promise.race übergeben - implizit Promise.resolve s alle Werte.
  • Ähnlich, wenn Sie ein fremdes "thenable" oder einen Wert von Promise#then(...) zurückgeben, ruft es Promise.resolve auf.
  • Wenn Sie await haben, wird implizit ein Wert Promise.resolve aufgerufen.

Und so weiter.

    
Benjamin Gruenbaum 05.08.2016, 09:56
quelle
3

Wenn Sie einen Wert haben, könnte ein Versprechen sein, ist Promise.resolve großartig.

In dem Programm, an dem ich gerade arbeite, habe ich viele Stellen, an denen ich eine UI-Komponente mit Callbacks für verschiedene Eingaben erstelle. Manchmal müssen diese Rückrufe Versprechungen zurückgeben, manchmal nicht. Anstatt den Rückruf zu übernehmen, wickle ich immer den Rückgabewert in Promise.resolve und Boom, Problem gelöst.

    
Malvolio 04.08.2016 17:43
quelle
3

Wenn promise1 wirklich ein Versprechen ist, dann kann dieses Konstrukt verwendet werden, um von einem Versprechen in ein anderes einer anderen Bibliothek zu konvertieren, wenn Promise z. definiert als var Promise = require('bluebird');

Es ist z.B. nützlich, wenn Sie eine ältere Version von jQuery verwenden, bei der das von den Funktionen zurückgegebene Defered-Objekt sich nicht wie ES6-konforme Versprechen verhält.

Oder wenn Sie natives ES6 Promise mit einer Bibliothek wie bluebridge verwenden möchten, die mehr Funktionen hat.

    
t.niese 04.08.2016 17:44
quelle

Tags und Links