Невозможно установить свойство userNm undefined - PullRequest
0 голосов
/ 29 марта 2020

После извлечения значения из БД я пытаюсь поместить его в переменную, но когда я это делаю, это выдает мне ошибку:

core.js:6014 ERROR Error: Uncaught (in promise): TypeError: Cannot set property 'userNm' of undefined TypeError: Cannot set property 'userNm' of undefined

Вот мой ts код:

userNm: string ='';

ngOnInit(){

   console.log("trying...");
   firebase.firestore().collection(`Students`)
   .where("authId", "==", this.userId) 
   .get()
   .then(querySnapshot => {
     querySnapshot.forEach(function(doc) {
         console.log(doc.data().Name); // OK RESULT IN CONSOLE.LOG,NAME IS String in db.
         this.userNm=doc.data().Name;  // ERROR HERE
         console.log(this.userNm)
         console.log(doc.id, " ===> ", doc.data());
     });
   });

Снимок экрана консоли и базы данных:

enter image description here

enter image description here

Ответы [ 2 ]

5 голосов
/ 29 марта 2020
Ключевое слово

this в Javascript function() относится к области действия функции. Чтобы использовать переменные-члены, используйте конструкцию функции стрелки. Вы можете попробовать следующее

firebase.firestore().collection(`Students`)
  .where("authId", "==", this.userId) 
  .get()
  .then(querySnapshot => {
    querySnapshot.forEach((doc) => {   // <-- Use arrow function here
      console.log(doc.data().Name);
      this.userNm = doc.data().Name;
      console.log(this.userNm)
      console.log(doc.id, " ===> ", doc.data());
    });
  });
0 голосов
/ 29 марта 2020

querySnapshot.forEach(function(doc) это представляет anonymous функцию this. использовать лямбда ..

querySnapshot.forEach((doc) =>{

querySnapshot.forEach((doc) =>{
         console.log(doc.data().Name); // OK RESULT IN CONSOLE.LOG,NAME IS String in db.
         this.userNm=doc.data().Name;  // ERROR HERE
         console.log(this.userNm)
         console.log(doc.id, " ===> ", doc.data());
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...