我有以下代码:
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
个对象)?
嵌套它们正是我想要避免的。
答案 0 :(得分:2)
您可以将then置于仍可访问用户的范围内(检查闭包)
authService.authenticate()
.then(function (user) {
Task.all({user: user})
.then(function (tasks) {
// How to access user object here?
})
})
从Kriskowal的Q
documentation本身来看,两种风格都是等价的。 Angular的$q
基于Q
唯一的区别是嵌套。如果需要在闭包中捕获多个输入值,则嵌套处理程序非常有用。
答案 1 :(得分:1)
可以将用户和任务合并到一个对象中以传递到下一个then
authService.authenticate()
.then(function (user) {
var defer = $q.defer()
Task.all({user: user}).then(function (tasks) {
return defer.resolve({user:user, tasks:tasks})
})
return defer.promise
})
.then(function (data) {
$scope.user=data.user;
$scope.tasks=data.tasks;
})
的 DEMO 强>