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 ()
?
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:
Es ist auch implizit genannt viel mit Versprechen.
Promise.all
oder Promise.race
übergeben - implizit Promise.resolve
s alle Werte. Promise#then(...)
zurückgeben, ruft es Promise.resolve
auf. await
haben, wird implizit ein Wert Promise.resolve
aufgerufen. Und so weiter.
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.
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.
Tags und Links javascript es6-promise