Ошибка асинхронного извлечения данных из Firestore с сообщением «Ошибка типа: невозможно прочитать свойство» неопределенного типа - PullRequest
0 голосов
/ 09 марта 2019

Предположим, у меня есть некоторые данные в firestore.Когда я вызываю функцию «Расчет», то для каждого сопоставленного элемента массив «alld» заполняется новыми объектами.После push () я получаю, console.log (alld);Все в порядке.Но когда я вызываю функцию getBl () и console.log (alld.n);затем он показывает все данные, а также показывает ошибку: «TypeError: Невозможно прочитать свойство 'n' неопределенного в b. $ scope.getBl".Я не мог понять причину.Я знаю, что get () является асинхронной функцией.Я также применил $ scope. $ ApplyAsync () ;.Это причина, или есть какая-то другая причина, я не знаю.Какое может быть решение?

var app = angular.module('myApp', ['firebase', 'ngRoute', 'angular.filter']);

app.controller('mCntlr', function ($scope, $firebaseArray) {
  var alld=$scope.alld=[{'n':j,'d':h,'c':l}];
  
  
 $scope.getBl=function (b){
let i=0;
   for(i=0;i<alld.length;i++)
   console.log("check  = "+$scope.alld[i].n); //Consol.log is printing data but it also showing "TypeError: Cannot read property 'n' of undefined"
   };
   
   
   $scope.Calculation = function (e) { firebase.firestore().collection("DataCollection").get()
  .then(function (snapshot) {

    snapshot.docs.forEach(element =>{
       fld =element.data();
       fld.dC.forEach(function(item){ alld.push({'n':item.A,'d':dr,'c':c});
  $scope.$applyAsync();});

     });
         console.log(alld); //it is ok
         $scope.getBl(); 
  }).catch(function (err) {
    console.log(err);
  });
  };
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

1 Ответ

0 голосов
/ 12 марта 2019

Попробуйте использовать это

 console.log("check  = "+alld[i].n);

Поскольку значения этих объектов (n,d,c) были неопределенными, вы получали эту ошибку. Или вместо let i=0; попробуйте var i=0; и вместо var alld=$scope.alld=[{'n':j,'d':h,'c':l}]; попробуйте $scope.alld=[{'n':j,'d':h,'c':l}]; тогда вы должны написать console.log($scope.alld);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...