解決我的名字在本地存儲的JSON文件列表:資源承諾不。然後
FrontEndApp.factory('readFileService', function ($resource) {
return $resource('data/:file',{file: "@file"});
});
:
[
{
"SID": "ADYN"
},
{
"SID": "ANGRYPIXEL"
}
]
我使用$資源成功地讀取JSON文件有一個服務
僅當打印到HTML視圖時,名稱列表才能正常工作。但是,我想使用JSON文件中的名稱來查詢API。通過使用「於是」,我可以識別名稱的數量在文件中,但不能訪問它們的名稱:
var query = readFileService.query({file: "orgList.json"});
query.$promise.then(function(data){
$scope.orgData = data;
//promise still not resolved??
for(org in $scope.orgData){
console.log(org);// prints 0 1 instead of objects
console.log(org.SID);// undefined instead of ADYN ANGRYPIXEL
//var results = getMembersService.get({orgName: org.SID});
//results.$promise.then(function(results){
// for(result in results)$scope.orgDataArray.push(result.name);
//});
}
});
應該使用「然後」,直到承諾解決不耽誤代碼的其餘部分?由於JSON文件是本地的,因此不存在失敗的可能性。如何阻止我的for循環,直到它的承諾解決?
我試過使用$ scope.orgData = data.toJSON();作爲幾個職位的建議,但我得到「錯誤:data.toJSON不是一個函數」
編輯: 基於一個建議,我試圖console.log(data.data),這是未定義的。 console.log(data)顯示一個包含331個對象的數組,它應該是因爲我的完整JSON文件中有331個對象。
它變得有趣:當我嘗試數據[0] .SID時,我得到了第一個名字!但是,如果我運行(數據組織),它只適用於第一個組織。爲什麼?
作爲一種變通方法,我可以使用循環計數器打印對象:
var i = 0;
for(org in data){
console.log(data[i]);
i++;
}
奇怪的是,打印出所有331,然後2個「未定義」
EDIT2: 好了,所以我得到我的應用程序與一些討厭的尋找解決方法的代碼工作,除了我從控制檯得到一個錯誤,當我從'我'遞增太高(我猜它包含一對承諾對象)。這不是處理數據的「正確」方式。
$scope.orgDataArray = [];
var query = readFileService.query({file: "orgList.json"});
query.$promise.then(function(data){
$scope.orgData = data;
console.log(data[0]);
var i = 0;
console.log(data.length);
//promise still not resolved??
for(org in data){
//console.log(data[i].SID);
var results = getMembersService.get({orgName: data[i].SID});
results.$promise.then(function(res){
var j=0;
for(member in res.data){
//console.log(res.data[j].handle);
$scope.orgDataArray.push(res.data[j].handle);
j++;
}
});
i++;
}
});
編輯3: 謝謝Dinesh!所以,
爲(以項目的項目)item.attribute不起作用,但
爲(以項目的項目)項目[項目]確實屬性約,那!isNaN接到擺脫控制檯錯誤的在承諾努力環/解決
EDIT4:終極密碼
FrontEndApp.controller('MemberController', ['$scope', '$http', 'readFileService', 'getMembersService', function($scope, $http, readFileService, getMembersService) {
$scope.orgDataArray = [];
var query = readFileService.query({file: "orgList.json"});
query.$promise.then(function(data){
$scope.orgData = data;
for(var org in $scope.orgData){
if(!isNaN(org)){//ignore promise and resolved
var results = getMembersService.get({orgName: $scope.orgData[org].SID});
results.$promise.then(function(apiObject){
for(member in apiObject.data){
$scope.orgDataArray.push(apiObject.data[member].handle);
}
});//end members subquery
}
}
});//end orgList query
}]);
試試這個$ scope.orgData = data.data; –
是否分配了'$ scope.orgData'?如果是這樣,你的承諾就解決了。如果沒有,那麼您的承諾在請求文件時遇到錯誤。嘗試附加一個'.catch'來查看你是否在不知不覺中遇到了一個異常(儘管Angular傾向於對這些非常大聲) –
你似乎期望'data'是一個數組?然後你應該使用一個合適的循環,參見[爲什麼在數組中使用'for ... in'這樣一個壞主意?](https://stackoverflow.com/q/500504/1048572) – Bergi