Weisen Sie den Wert aus der erfolgreichen Vervollständigung der Empfehlung der externen Variablen zu
Ich habe ein ziemlich dummes problem. Betrachten Sie das folgende:
vm.feed = getFeed().then(function(data) {return data;});
getFeed()
gibt eine $q latente Versprechen (ich bin auf eckig), die erfolgreich aufgelöst wird.
Mein Ziel ist es vm.feed gleich auf die Daten Wert, der zurückgegeben wird, durch den erfolgreichen Rückruf. So wie es jetzt ist, kann der code einfach weist vm.feed entspricht der $promise
Objekt zurückgegeben getFeed()
.
Ich weiß, ich könnte einfach tun: vm.feed = data
innerhalb der Funktion gelöst, aber ich möchte verstehen, warum dieser code nicht funktioniert, wie es ist.
PD: das Versprechen löst korrekt und auch nachdem es geklärt wurde vm.feed hält gleich um die Verheißung, und nicht Daten. Kopiere ich die Konsole.log der vm.füttern nach +10 Sekunden verstrichen sind:
Promise {$$state: Object} $$state: Objectstatus:1 value: Object
Dass die value-Eigenschaft innerhalb der Promise-Objekt enthält die eigentlichen Lösung der Versprechen, die ich zuweisen möchten vm.feed (e.ich. data
).
danke!
InformationsquelleAutor der Frage Gerard Clos | 2015-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Deine Aussage nicht mehr, als bitten Sie die Dolmetscher zum zuweisen der Rückgabewert von
then()
zu denvm.feed
variable.then()
gibt Ihnen ein Versprechen (wie man hier sehen kann: https://github.com/angular/angular.js/blob/master/src/ng/q.js#L283). Sie konnte das Bild, indem Sie sehen, dass das Versprechen (ein einfaches Objekt) wird gezogen aus der Funktion heraus und immer zugeordnetvm.feed
. Dies geschieht, sobald der interpreter führt die Linie.Seit Ihrem erfolgreichen Rückruf nicht ausgeführt, wenn
then()
aber nur, wenn Ihr Versprechen aufgelöst wird (zu einem späteren Zeitpunkt asynchron), es wäre unmöglich fürthen()
um wieder seinen Wert für die Anrufer. Dies ist der Standard-Weg Javascript funktioniert. Dies war genau der Grund, Versprechen eingeführt wurden, so könnte man Fragen Sie den Dolmetscher zu push der Wert für Sie, in form eines Rückrufs.Allerdings auf einer zukünftigen version wird gearbeitet für JavaScript (ES2016) ein paar Schlüsselwörter eingeführt werden, um zu arbeiten ziemlich viel, wie Sie erwarten gerade jetzt. Die gute Nachricht ist, können Sie beginnen, code zu schreiben, wie dies heute durch transpilation von ES2016 zu den aktuellen allgemein unterstützte version (ES5).
Eine schöne Einführung in das Thema ist verfügbar unter: https://www.youtube.com/watch?v=lil4YCCXRYc
Verwenden Sie es jetzt, können Sie transpile Ihr code über Babel: https://babeljs.io/docs/usage/experimental/ (durch die Ausführung mit
--stage 1
).Können Sie auch hier einige Beispiele: https://github.com/lukehoban/ecmascript-asyncawait.
InformationsquelleAutor der Antwort Nathan
Den
then()
Methode gibt ein Versprechen. Es nimmt zwei Argumente, beide sind callback-Funktionen, die für den Erfolg und Misserfolg Fällen der Verheißung. das promise-Objekt selbst nicht geben Sie die aufgelöste Daten direkt, die Schnittstelle dieses Objekt stellt nur die Daten über Rückrufe geliefert. Also, man muss das in etwa so machen:Den
then()
Funktion gibt das Versprechen, mit einer aufgelösten Wert des vorherigenthen()
Rückruf, indem Sie übergeben den Wert an die nachfolgenden callbacks:InformationsquelleAutor der Antwort BhavO
Diese aktualisiert werden kann, um ES6 mit Pfeil-Funktionen und Aussehen:
Wenn Sie möchten, um die
async function
könnte man auch so machen:InformationsquelleAutor der Antwort Soldeplata Saketos