Проблема асинхронного возврата данных Firestore, показывающая «TypeError: не удается прочитать свойство «неопределенного»

#javascript #jquery #node.js #firebase #google-cloud-firestore

#javascript #jquery #node.js #firebase #google-облако-firestore

Вопрос:

Предположим, у меня есть некоторые данные в firestore. Когда я вызываю функцию «Вычисление», то для каждого сопоставленного элемента в массив «alld» загружаются новые объекты. После push () я получаю console.log (allld); Все в порядке. Но когда я вызываю функцию 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. для(i = 0; i<alld. длина; i ) console.log(«check = » $scope.alld[i].n); Перед этим циклом for, если я напишу, console.log(alld. длина); тогда он также показывает длину! Это действительно сбивает с толку!

Ответ №1:

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

  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);

Комментарии:

1. Нет. Здесь основная проблема заключается в следующем: console.log(«check = » $scope.alld[i].n); //Consol.log печатает данные, но также показывает «TypeError: не удается прочитать свойство ‘n’ неопределенного» Как консоль. в журнале могут отображаться данные и ошибка типа одновременно