AngularJS:$ http响应太慢

时间:2015-07-28 11:06:22

标签: javascript angularjs

我正在使用此代码:

$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];
                    };
                };                    
            }

2 个答案:

答案 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