Ich habe den folgenden Code:Wie kann ich auf das Ergebnis des vorherigen Versprechens in der AngularJS-Versprechungskette zugreifen?
authService.authenticate()
.then(function (user) {
return Task.all({user: user})
})
.then(function (tasks) {
// How to access user object here?
})
Gibt es eine eingebaute Möglichkeit, user
Objekt in die zweite then
Funktion ohne so etwas wie dies zu tun zu passieren:
var user2 = null;
authService.authenticate()
.then(function (user) {
user2 = user
return Task.all({user: user})
})
.then(function (tasks) {
// Use user2 here
})
oder dies:
authService.authenticate()
.then(function (user) {
var defer = $q.defer()
Task.all({user: user}).then(function (tasks) {
return defer.resolve(user, tasks)
})
return defer.promise
})
.then(function (user, tasks) {
// Use user2 here
})
oder verschachteln sie durch den Aufruf der zweiten then
direkt auf Task.all
(auf diese Weise hätte ich user
Objekt über Verschluss verfügbar)? Verschachtelung ist genau das, was ich vermeiden möchte.
Danke, aber das ist der dritte Fall war ich etwa in meiner Frage sprechen - Verschachtelung sie :) Ich versuche es zu vermeiden, weil ich gerade einen vereinfachten Fall gezeigt habe - im echten Code gibt es ein paar mehr Versprechungen, also wäre das Verschachteln genauso wie das Verwenden von Rückrufen. – szimek
hmm ... ja, du hast Recht. Die Sache ist, dass ich diesen verschachtelten Stil in meinem Code verwende und der Code wirklich sehr groß ist ... Die Verschachtelungstiefe ist nicht wirklich so groß. Außerdem hilft die Coffeescript-Syntax sehr;) –
Ich benutze CoffeeScript auch, also werde ich versuchen, sie zu verschachteln und zu sehen, wie es aussieht. Obwohl ich mir nicht ganz sicher bin, wie die Fehlerbehandlung im Falle verschachtelter Versprechen funktioniert ... – szimek