$ q.all使用angularjs中的循环创建动态promise

时间:2016-04-26 06:52:31

标签: arrays angularjs angular-promise

我想创建一个循环,这个循环使我的第二个承诺变得如此,所以每当它传入我的循环时,就会产生一个新的承诺:

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仅返回一个结果。

你能帮帮我吗?

1 个答案:

答案 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;
}