如何访问AngularJS保证链中先前承诺的结果?

szi*_*mek 5 javascript promise angularjs

我有以下代码:

authService.authenticate()
.then(function (user) {
  return Task.all({user: user})
})
.then(function (tasks) {
  // How to access user object here?
})
Run Code Online (Sandbox Code Playgroud)

是否有一些内置的方法将user对象传递给第二个then函数而不执行以下操作:

var user2 = null;
authService.authenticate()
.then(function (user) {
  user2 = user
  return Task.all({user: user})
})
.then(function (tasks) {
   // Use user2 here
})
Run Code Online (Sandbox Code Playgroud)

或这个:

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
})
Run Code Online (Sandbox Code Playgroud)

或通过then直接调用第二个来嵌套它们Task.all(这样我user可以通过闭包获得对象)?嵌套它们正是我想要避免的.

kum*_*rsh 2

您可以将 then 放在用户仍然可以访问的范围内(检查闭包)

\n\n
authService.authenticate()\n.then(function (user) {\n  Task.all({user: user})\n  .then(function (tasks) {\n    // How to access user object here?\n  })\n})\n
Run Code Online (Sandbox Code Playgroud)\n\n

从 Kriskowal 的Q文档本身来看,两种风格是等效的。Angular$q是基于Q

\n\n
\n

唯一的区别是嵌套。如果您需要在闭包中捕获多个输入值,则嵌套处理程序非常有用。

\n
\n