我有一个包含对象列表的列表,所以现在我想再向主列表中的每个列表添加一个对象
我正在使用AngularJS
这是我试过的代码
$scope.mediaList = [];
$scope.getTheProfile = function(data){
for(var i in data)
{
ProfileService.getByHandle(data[i].handle,function(profiledata)
{
$scope.mediaList[i].displayName = profiledata.name.displayName
},
function(data , status){
console.log("In Error");
if(status == '400'){
$scope.errors.push(data["ERROR"])
}
},
function(data , status){
console.log("In forbidden")
})
}
alert($scope.mediaList[0].displayName)
}
所以我试图将displayName添加到该列表中
现在问题是我无法获得该警报中的值
如果该警报在ProfileService.getByHandle
函数内,那么我将获得值
这是函数getByHandle
this.getByHandle = function(handle, successCB, errorCB, forbiddenCB) {
console.log("In Profile Service for fetching the profile by handle: "+handle);
HttpCommunicationUtil.doGet(apiConstants["profile"]["getByHandle"]+"/"+handle, successCB, errorCB, forbiddenCB);
};
答案 0 :(得分:0)
查看getByHandle
,您似乎正在使用HttpCommunicationUtil.doGet
发送异步 HTTP请求。
这样做:for
循环将进行HTTP
调用并触发此警报alert($scope.mediaList[0].displayName)
,而不等待getByHandle
的响应,因为它是异步请求。
因此,当您尝试alert
时,由于第1行,[]
会有一个空数组$scope.mediaList
值。所以$scope.mediaList[0].displayName
会产生错误,说无法获取未定义的displayName。
您可以在ProfileService.getByHandle
中返回promises,并在解析后使用.then
更新您的变量。
如果您可以发布HttpCommunicationUtil.doGet
的代码,那么它会更有用。
修改强>:
如果没有HttpCommunicationUtil.doGet
,我会告诉您如何以通用方式进行操作。
服务:
this.getByHandle : function(params) {
return $http.get('/api/endpoint');
}
控制器:
ProfileService.getByHandle(params).then(function(data){
//use data to push response in $scope.mediaList[i]
});