链接“然后”请求angularjs

时间:2018-04-13 09:52:38

标签: angularjs

我在我的控制器中有两个使用服务并返回一些数据的调用。我的第二个电话取决于第一个电话的结果。如何解析两个调用并仅在第一个调用时从第二个获取数据?

InviteFriendsCodeService.getLeagueCode().then( (resp) => {
  ctrl.invitationCode = resp.data.data.leagues[0].code;

  return false;


});

InviteFriendsCodeService.getInviteLink().then( (resp) => {

 ctrl.recruitCode = resp.data.data.code;
 ctrl.invitationLink = `${window.location.origin}/registration/?recruit=${ctrl.recruitCode}&league=${ctrl.invitationCode}`

 return false;

});

3 个答案:

答案 0 :(得分:2)

我认为你的两个电话都是相互独立的(因为你没有使用第一个响应来启动第二个电话)。

因此,您可以同时触发它们并在它们都解决时分配控制器成员。像这样:

Promise.all([
  InviteFriendsCodeService.getLeagueCode(),
  InviteFriendsCodeService.getInviteLink()
]).then(function(resp) {
  ctrl.invitationCode = resp[0].data.data.leagues[0].code;
  ctrl.recruitCode = resp[1].data.data.code;
  ctrl.invitationLink = `${window.location.origin}/registration/?recruit=${ctrl.recruitCode}&league=${ctrl.invitationCode}`
});

答案 1 :(得分:1)

如果您从then函数返回另一个承诺,原始承诺将根据返回的承诺解析而解决,允许您将两者联系起来:

InviteFriendsCodeService.getLeagueCode()
  .then( (resp) => {
    ctrl.invitationCode = resp.data.data.leagues[0].code;
    return InviteFriendsCodeService.getInviteLink();
  }).then( (resp) => {
   ctrl.recruitCode = resp.data.data.code;
   ctrl.invitationLink = `${window.location.origin}/registration/?recruit=${ctrl.recruitCode}&league=${ctrl.invitationCode}`
 return false;
  });

答案 2 :(得分:0)

在第一个承诺

中写下你的第二个电话



InviteFriendsCodeService.getLeagueCode().then((resp) => {
	ctrl.invitationCode = resp.data.data.leagues[0].code;
	InviteFriendsCodeService.getInviteLink().then((resp) => {
		ctrl.recruitCode = resp.data.data.code;
		ctrl.invitationLink = `${window.location.origin}/registration/?recruit=${ctrl.recruitCode}&league=${ctrl.invitationCode}`
		return false;
	});
	return false;
});