【问题标题】:How can I resolve the nested $q.all by order如何按顺序解决嵌套的 $q.all
【发布时间】:2018-10-04 10:46:59
【问题描述】:

我的 angularjs 项目中有两个 promise 函数,getToken()getUser(token)

我可以像这样运行两个操作:

$q.all({token: getToken(), userId: getUserId()})
.then(function(resolutions){
  var token  = resolutions.token;
  var userId = resolutions.userId;
});

但是我的getUserId() 方法需要一个令牌作为参数。所以我需要先获取token,然后获取userId并返回token和userId。如何使用 $q 做到这一点?

我是这样使用chaniing的:

return getToken().then(function(token){
      return getUserId(token).then(function(userid){
            return {token: token, userid: userid};
      })
})

但是没用,userid 为空。

【问题讨论】:

  • 使用promise chaining 而不是$q.all
  • 那么你就不需要$q.all,只需将它们一个一个链接到另一个
  • @NikhilAggarwal 我可以使用 Promise chaning 返回令牌和用户 ID 结果吗?我该怎么办?

标签: javascript angularjs deferred


【解决方案1】:

你可以像下面这样链接承诺

getToken()
.then(function(token){
     return getUser(token)
     .then(function(userId){
          return {token, userId};
      })
})

【讨论】:

  • 我觉得这还不够聪明,我们可以用递归函数按顺序制作吗?
  • @WeijingJayLin - 如果函数和响应不同,我认为对 2 个 promise 使用递归函数是没有意义的。不过,一个更好的班轮可以是getToken().then((token) => getUser(token).then((userId) => ({token, userId})));
  • 是的,你是对的......这不是一个很长的清单
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多