我想创建一个循环,这个循环使我的第二个承诺变得如此,所以每当它传入我的循环时,就会产生一个新的承诺:
var promise1 = $http({
method: 'GET',
url: "https://cubber.zendesk.com/api/v2/organizations/"+id+"/users.json",
dataType: 'json',
headers: {'Content-Type': 'application/json',
'Authorization': 'Bearer '+token}
});
var promise2 = promise1.then(function(data) {
console.log(data);
for(i = 0; i < data.data.users.length; i++){
console.log(data.data.users.length);
var userid = data.data.users[i].id;
console.log(userid);
return $http({
method: 'GET',
url: "https://cubber.zendesk.com/api/v2/users/"+userid+"/tickets/requested.json",
dataType: 'json',
headers: {'Content-Type': 'application/json',
'Authorization': 'Bearer '+token}
})
}
});
$q.all([promise1, promise2]).then(function(data){
console.log(data[0].data.users, data[1]);
});
在此代码中,循环不起作用,因为promise2
仅返回一个结果。
你能帮帮我吗?
答案 0 :(得分:4)
将您的代码更多地视为您想要触发的事件链。忘记同步 - 忘记逐行透视。
在这种情况下,我们会触发第一个http请求。然后,在响应请求时,我们发出一堆userid http请求,并建立一个返回的promise的数组列表。
然后使用$ q.all,我们回复collectivley所有这些承诺,并做一个控制台日志。
ClientCredentials Credentials = new ClientCredentials();
Credentials.UserName.UserName = UserName;
Credentials.UserName.Password = Password;
Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
Uri OrganizationUri = new Uri(Crmserverurl);
Uri HomeRealmUri = null;
using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null))
{
crmSvc = (IOrganizationService)serviceProxy;
}