Tôi có đoạn mã sau:Cách truy cập kết quả từ lời hứa trước đó trong chuỗi lời hứa AngularJS?
authService.authenticate()
.then(function (user) {
return Task.all({user: user})
})
.then(function (tasks) {
// How to access user object here?
})
Có một số cách built-in để vượt qua user
đối tượng thứ hai then
chức năng mà không làm một cái gì đó như thế này:
var user2 = null;
authService.authenticate()
.then(function (user) {
user2 = user
return Task.all({user: user})
})
.then(function (tasks) {
// Use user2 here
})
hay này:
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
})
hoặc lồng chúng bằng cách gọi số then
thứ hai trực tiếp trên Task.all
(cách này tôi có đối tượng user
có sẵn thông qua đóng cửa)? Làm tổ họ là chính xác những gì tôi đang cố gắng để tránh.
Cảm ơn, nhưng đó là trường hợp thứ ba tôi đã nói về trong câu hỏi của tôi - làm tổ họ :) Tôi đang cố gắng tránh nó, bởi vì tôi chỉ cho thấy một trường hợp đơn giản - trong mã thực có một vài hứa hẹn hơn, do đó, lồng chúng sẽ giống như sử dụng callbacks. – szimek
hmm ... vâng, bạn nói đúng. Vấn đề là tôi đang sử dụng kiểu lồng nhau này trong mã của tôi, và mã thực sự rất lớn ... Mức độ làm tổ không thực sự quá lớn. Ngoài ra, cú pháp Coffeescript giúp rất nhiều;) –
Tôi đang sử dụng CoffeeScript, vì vậy tôi sẽ cố gắng lồng ghép chúng và xem nó trông như thế nào. Mặc dù tôi không chắc chắn chính xác cách xử lý lỗi hoạt động trong trường hợp các lời hứa lồng nhau ... – szimek