我在我的控制器中有两个使用服务并返回一些数据的调用。我的第二个电话取决于第一个电话的结果。如何解析两个调用并仅在第一个调用时从第二个获取数据?
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;
});
答案 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;
});