У меня есть следующий код:Как получить результат от предыдущего обещания в цепочке обещаний AngularJS?
authService.authenticate()
.then(function (user) {
return Task.all({user: user})
})
.then(function (tasks) {
// How to access user object here?
})
Есть некоторые встроенные способ передать user
объект второй then
функции, не делая что-то вроде этого:
var user2 = null;
authService.authenticate()
.then(function (user) {
user2 = user
return Task.all({user: user})
})
.then(function (tasks) {
// Use user2 here
})
или это:
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
})
или гнездование их путем вызова второго then
непосредственно на Task.all
(таким образом у меня был бы user
объект доступен через закрытие)? Вложение их - именно то, чего я пытаюсь избежать.
Спасибо, но это третий случай я говорил в моем вопросе - вложенность они :) Я пытаюсь избежать этого, потому что я просто показал упрощенное дело - в реальном коде есть еще несколько обещаний, поэтому вложение их было бы подобно использованию обратных вызовов. – szimek
Хм ... да, ты прав. Дело в том, что я использую этот вложенный стиль в своем коде, а код действительно очень большой ... Уровень вложенности на самом деле не такой большой. Кроме того, синтаксис Coffeescript очень помогает;) –
Я также использую CoffeeScript, поэтому я попытаюсь вложить их в папку и посмотреть, как это выглядит. Хотя я не совсем уверен, как работает обработка ошибок в случае вложенных обещаний ... – szimek