我的控制器中有一个函数请求dataservice数据,我正在尝试添加到当前作用域变量,但它给了我未定义的错误
$scope.affiliates = d.data;
if (isNaN($scope.affiliate_id)){
var i = 0;
while (i < $scope.affiliates.length){
var affiliate_id = $scope.affiliates[i].affiliate_id.replace(/["']/g, "");
DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){
$scope.affiliates[i].apiData = apiData;//ERROR IN HERE
});
i++;
}
}
TypeError:$ scope.affiliates [i]未定义
我也尝试从dataService返回数据并将其设置在外部,但它总是返回空。 我怎么解决这个问题?
答案 0 :(得分:2)
不要忘记getAffiliateConversionApiService
正在返回一个承诺(这意味着它是一个异步操作),因此while
块将针对每个可能的i
执行} 之前你甚至可以从getAffiliateConversionApiService
得到结果。
让我们假设$scope.affiliates.length
6 。执行then
内的回调代码后,您的i
将 7 。
一种解决方案是使用angular.forEach
代替while
。但是,如果您仍想使用while
,则需要将i
值存储在另一个变量中:
while (i < $scope.affiliates.length){
var index = i;
var affiliate_id = $scope.affiliates[i].affiliate_id.replace(/["']/g, "");
DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){
$scope.affiliates[index].apiData = apiData;
});
i++;
}
答案 1 :(得分:0)
这不是一个真正的答案,但这里有一些调试可以帮助你。 此外,我从使用while循环切换到使用angular的forEach
$scope.affiliates = d.data;
if (isNaN($scope.affiliate_id)){
console.log($scope.affiliates); // what does this return?
angular.forEach($scope.affiliates, function(value, index){
console.log(value); // output the affiliate, if any
var affiliate_id = value.affiliate_id.replace(/["']/g, "");
DataService.getAffiliateConversionApiService(affiliate_id).then(function(apiData){
console.log(apiData); // see what is returned
$scope.affiliates[index].apiData = apiData; // still an error?
});
});
}