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

Предположим, у меня есть данные в firestore. Когда я вызываю функцию «Расчет», тогда для каждого совпавшего элемента массив «alld» помещается в новые объекты. После push() я получаю console.info(alld); Все хорошо. Но когда я вызываю функцию getBl() и console.info(alld.n); затем он показывает все данные, а также показывает ошибку: «Ошибка типа: невозможно прочитать свойство« 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.info("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.info(alld); //it is ok
         $scope.getBl(); 
  }).catch(function (err) {
    console.info(err);
  });
  };
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>

for(i=0;i<alld.length;i++) console.info("check = "+$scope.alld[i].n); Перед этим циклом for, если я пишу, console.info(alld.length); тогда он также показывает длину! Это действительно запутанно!

SoftDev 09.03.2019 21:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
190
1

Ответы 1

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

 console.info("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.info($scope.alld);

Нет. Здесь основная проблема: console.info("check = "+$scope.alld[i].n); //Consol.log печатает данные, но также показывает «Ошибка типа: невозможно прочитать свойство 'n' of undefined». Как console.info может отображать данные и ошибку типа одновременно

SoftDev 12.03.2019 07:30

Другие вопросы по теме