Was bedeutet [[PromiseValue]] in JavaScript-Konsole und wie ich es bekomme
Habe ich die folgende Funktion versucht zu nutzen Verspricht.
var getDefinitions = function(){
return new Promise(function(resolve){
resolve(ContactManager.request("definition:entities"));
});
}
var definitions = getDefinitions()
zurück:
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: child}
Ich will den Wert von PromiseValue, aber Fragen Sie für
var value = definitions.PromiseValue
gibt mir ein Undefiniertes Ergebnis.
Meine Frage ist, was die Doppel-Klammern [[ ]]
bedeuten, und wie Kriege ich den Wert [[PromiseValue]]
.
InformationsquelleAutor der Frage Jeff | 2015-03-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was das Zeug innen
[[]]
Es ist eine interne Eigenschaft. Sie können nicht direkt auf ihn zugreifen. Native verspricht, kann nur ausgepackt in
then
mit dem Versprechen, oder asynchron, in der Regel - siehe Wie die Antwort zurückgegeben wird von einem asynchronen Aufruf. Zitieren die Spezifikation:Können Sie nicht
Aber im ernst - was sind Sie?
Sehr schön! Wie das obige Zitat sagt, Sie sind nur in der Spezifikation - es gibt also keinen Grund für Sie, um wirklich zu erscheinen in der Konsole.
Sagen Sie niemandem, aber diese sind wirklich private Symbole. Der Grund, warum Sie existieren, ist für andere internen Methoden werden in der Lage, Zugang
[[PromiseValue]]
. Zum Beispiel, wenn io.js entscheidet sich Rendite Versprechen, anstatt Rückrufe - diese würde es ermöglichen, den Zugriff auf diese Eigenschaften fallen in den Fällen gewährleistet ist. Sie sind nicht der Außenwelt ausgesetzt.Kann ich auf Sie zugreifen?
Nicht, es sei denn, Sie machen Ihre eigenen Chrome-oder V8 zu bauen. Vielleicht ES7 mit zugriffsmodifizierer, jetzt gibt es keinen Weg, denn Sie sind nicht Teil der Spezifikation und brechen in allen Browsern - sorry.
Also ich bekomme ich meinen Wert?
Obwohl, wenn ich mir denke - du bist nicht die Konvertierung der API richtig zu beginnenda diese Umwandlung würde nur funktionieren, falls die Methode ist synchron (in diesem Fall nicht wieder ein Versprechen) oder es gibt ein Versprechen schon wird es behoben ist (was bedeutet, dass Sie nicht brauchen, die Umwandlung überhaupt - nur
return
.InformationsquelleAutor der Antwort Benjamin Gruenbaum
Ich ging auch in den heute dieses problem und zufällig eine Lösung zu finden.
Meine Lösung sieht wie folgt aus:
Hier
dataWrappedByPromise
ist einPromise
Instanz. Der Zugriff auf die Daten in derPromise
Beispiel fand ich, dass ich nur benötigt, um Auspackendass die Instanz mit der.json()
Methode.Hoffe, das hilft!
InformationsquelleAutor der Antwort cafemike
Diese Beispiel ist mit reagieren, aber zum größten Teil, es sollten die gleichen sein.
Ersetzen.Requisiten.url mit Ihrer url zu Holen, damit es funktioniert für die meisten anderen frameworks.
Analyse der res.json() gibt die [[promiseValue]] allerdings, wenn Sie dann wieder zu einem anderen .dann() folgenden Methode können Sie zurückgeben, da eine gesamte Palette.
InformationsquelleAutor der Antwort Lachlan Young
Lesen die manpagekönnen wir sehen, dass:
Hervorhebung von mir. Also, was wollen Sie tun, kann nicht getan werden. Die bessere Frage ist warum tun, müssen Sie Zugriff auf das Versprechen Stand?
InformationsquelleAutor der Antwort Nit
Ich denke, dass es gut gehen wird mit dieser.
InformationsquelleAutor der Antwort Shun ITOH
Dieser code mein problem lösen
InformationsquelleAutor der Antwort Mazba Uddin