Angular JS代码在有时被提出之前运行

时间:2016-10-13 16:16:58

标签: javascript angularjs for-loop rendering

我的代码存在问题,无法解决为什么会发生这种情况或解决问题的方法。我的问题是在代码结束时调用updateProduct()函数,之后forEach语句甚至开始10个页面加载中的一个。我无法理解为什么会这样做。有谁知道会导致这种情况的原因以及防止这种情况发生的解决方案是什么?

我尝试过使用一个承诺,并且在7/10页面加载方面取得了成功。到目前为止,这是成功的约9/10页面加载。真的很困惑它在它运行之前是如何完成循环的。

$http.get('file.json').success(function(data) {
        $scope.products = data;
        $scope.product_map = {};
        var itemsProcessed = 0;
        $scope.products.forEach(function(item) {
            $scope.product_map[item.sku] = item;
            itemsProcessed++;
            if(itemsProcessed === $scope.products.length) {                    
                $scope.seriesId = $scope.series_map[$scope.hashTag].seriesID;
                updateProduct($scope.series_map[$scope.hashTag].products[0].sku, $scope.series_map[$scope.hashTag].products[0].image);
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

好的,

有人发表评论然后删除了该评论。首先,感谢您的评论,因为它有助于解决我的困境。我有2个http.get函数,我需要在for循环结束之前完成每个函数。发生的事情是我的第一个http.get被挂起并导致错误。在加载第二个之前,我甚至没有想到第一个完成。

我通过以下方式解决了这个问题:

$http.get('file1.json').success(function(data) {
    $scope.series= data;
    $scope.series_map = {};    
 }).then(function successCallback(){
    $http.get('file2.json').success(function(data) {
        $scope.products = data;
        $scope.products_map = {};
        $scope.products.forEach(function(item) {
            $scope.product_map[item.sku] = item;
            itemsProcessed++;
            if(itemsProcessed === $scope.products.length) {                    
                $scope.seriesId = $scope.series_map[$scope.hashTag].seriesID;
                updateProduct($scope.series_map[$scope.hashTag].products[0].sku, $scope.series_map[$scope.hashTag].products[0].image);
            }
        });
 });
相关问题