我正在使用此代码:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
}).
error(function() {
console.log('API error - config.')
});
下面的某个地方(很吼):
for (var i = 0; i < $scope.authors.length; i++) {
...
};
有时会发生$scope.authors
尚无法使用的情况。有什么方法可以解决这个问题吗?
更新
这是整个块结构:
// author
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
processAuthors();
}).
error(function() {
console.log('API error - config.')
});
// if updating form
$scope.$on('$routeChangeSuccess', function() {
if($routeParams.id) {
$http.get('/api/offers/' + $routeParams.id).
success(function(data) {
// author
function processAuthors() {
for (var i = 0; i < $scope.authors.length; i++) {
if($scope.authors[i].email == data.author.email) {
$scope.author = $scope.authors[i];
};
};
}
答案 0 :(得分:1)
将循环置于成功部分:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
for (var i = 0; i < $scope.authors.length; i++) {
...
};
}).
error(function() {
console.log('API error - config.')
});
答案 1 :(得分:1)
是的,低于它的数量并不重要 - 您仍然需要在回调中调用它,因为它是异步调用:
function processAuthors() {
for (var i = 0; i < $scope.authors.length; i++) {
...
};
}
然后:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
processAuthors();
})
我使用了一个函数使它看起来更干净,但你可以复制依赖于其中回调的代码。
更新
function processAuthors(data) {
for (var i = 0; i < $scope.authors.length; i++) {
if($scope.authors[i].email == data.author.email) {
$scope.author = $scope.authors[i];
};
};
}
$scope.$on('$routeChangeSuccess', function() {
if($routeParams.id) {
$http.get('/api/offers/' + $routeParams.id).
success(function(data) {
// author
processAuthors(data); // just call it here, define it outside