有没有办法通过 AngularJS 中的函数调用未知数量的 API 调用到 URL get()
,并将它们全部添加到模型($scope
变量)中。到目前为止,我所做的如下:
if(theUIDS != "") {
var myDropbox = [];
for(i = 0; i < theUIDS.length; i++) {
var temp = {};
temp.uid = theUIDS[i];
$http({ url: '/dropbox/accounts/get', method: 'GET', params: { uid: theUIDS[i] }}).success(function(acctData) {
temp.accountInfo = acctData;
});
$http({ url: '/dropbox/files/get', method: 'GET', params: { uid: theUIDS[i] }}).success(function(fileData) {
temp.files = fileData;
});
myDropbox.push(temp);
}
$scope.dropboxAccounts = myDropbox;
}
我检查是否有任何 UID,并为每个 UID 创建一个temp
对象,该对象填充一个uid
,然后是一个accountInfo
对象,然后是一个files
对象。设置temp
对象后,我将其推送到myDropbox
阵列上。循环完成后,我将 dropboxAccounts 模型设置myDropbox
为$scope
. 我是 Angular 的新手,但我很确定这至少是正确的想法。幸运的是,我以正确的顺序获得了以下数据:
{"uid":"332879"}
{"uid":"155478421",
"accountInfo":{
"country":"US",
"display_name":"Patrick Cason",
"name":"Second Dropbox",
"quota_normal":1174504,
"quota_shared":0,
"quota_total":2147483648,
"referral_link":"https://www.dropbox.com/referrals/NTE1NTQ3ODQyMTk?src=app9-203957",
"uid":155478421},
"files":[{
"created_at":"2013-04-17T15:13:46Z",
"directory":true,
"dropbox_user_id":26,
"fileType":"Folder",
"id":198,
"name":"Photos",
"path":"/Photos",
"rev":"10edb44f9",
"size":"-",
"updated_at":"2013-04-17T15:13:46Z"}]
}
奇怪的是,只有我的一个 UID 得到更新。我知道循环正在正确通过,因为我有两个 UID,如果我在循环开始时发出警报,我会得到两个循环。我认为第二个没有被填充的原因是因为 push 语句没有等待两个承诺都通过。如何确保在分配myDropbox
给$scope
变量之前等待每个 AJAX 调用完成?