2015-12-30 4 views
0

У меня есть фабрика, которая вызывает 4 файла json, а затем я хочу сделать несколько обработок для каждого из этих данных и вставить их в массив объектов, это код, который я написал :Не могу прочитать свойство «push» undefined в AngularJS

myapp.factory('wordsCloudFactory', function($http) { 
    var factory = { 
     getList: function() { 

      return $http.get('data/periode_1_file.JSON') 
       .then(function(response1) { 
        return $http.get('data/periode_2_file.JSON') 
         .then(function(response2) { 
          return $http.get('data/periode_3_file.JSON') 
           .then(function(response3) { 
            return $http.get('data/periode_4_file.JSON') 
             .then(function(response4) { 
              var words = [{ 
               'period1': [], 
               'period2': [], 
               'period3': [], 
               'period4': [] 
              }]; 
              console.log(words); 
              for (var i = response1.data['X_id'].length - 1; i >= 0; i--) { 
               words['period1'].push({ 
                id: response.data['X_id'][i], 
                count: response.data['count'][i] 
               }); 
              }; 
              for (var i = response2.data['X_id'].length - 1; i >= 0; i--) { 
               words['period2'].push({ 
                id: response.data['X_id'][i], 
                count: response.data['count'][i] 
               }); 
              }; 
              for (var i = response3.data['X_id'].length - 1; i >= 0; i--) { 
               words['period3'].push({ 
                id: response.data['X_id'][i], 
                count: response.data['count'][i] 
               }); 
              }; 
              for (var i = response4.data['X_id'].length - 1; i >= 0; i--) { 
               words['period4'].push({ 
                id: response.data['X_id'][i], 
                count: response.data['count'][i] 
               }); 
              }; 
              return words; 
             }, function(error) { 
              return 'There was an error getting data'; 
             }) 

           }, function(error) { 
            return 'There was an error getting data'; 
           }) 

         }, function(error) { 
          return 'There was an error getting data'; 
         }) 
       }, function(error) { 
        return 'There was an error getting data'; 
       }) 
     } 
    }; 
    return factory; 
}) 

этот код он не работает он показывает мне ошибку message : 'Cannot read property 'push' of undefined'.

Как я могу это решить?

Как вы можете видеть в моем коде, существует много вложенных методов $http.get, нет ли другого способа написать это?

ответ

2

Ваш words массив объекта

var words = [{ 
    'period1': [], 
    'period2': [], 
    'period3': [], 
    'period4': [] 
}]; 

Вы должны получить к нему доступ по индексу.

Попробуйте как этот

words[0]['period1'].push({ 
    id: response.data['X_id'][i], 
    count: response.data['count'][i] 
}); 

JSFIDDLE

Если это просто объект Как

var words = { 
    'period1': [], 
    'period2': [], 
    'period3': [], 
    'period4': [] 
}; 

Тогда ваш толчок было нормально.

words['period1'].push({ 
    id: response.data['X_id'][i], 
    count: response.data['count'][i] 
}); 

JSFIDDLE

Смежные вопросы