Не удается прочитать свойства afs (Angularfirestore) из undefined в collection.set () - PullRequest
0 голосов
/ 12 апреля 2019

Я использую следующий код для перебора коллекции данных и изменения поля, если адрес электронной почты совпадает.Обратите внимание, что код вылетает на съемочной площадке.Итерация работает просто отлично.afs инициализируется как AngularFirestore

onChangeRole(email) {
  this.afs.collection("users").get().toPromise().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      // doc.data() is never undefined for query doc snapshots
      console.log(doc.id, " => ", doc.data());

      if (doc.data().email == email) {
        this.afs.collection("users").doc(doc.id).set({
          role: 2
        })
      }
    });
  });
}

Но я получаю:

Ошибка ERROR: Uncaught (в обещании): TypeError: Невозможно прочитать свойство 'afs' из неопределенного TypeError: Невозможно прочитатьсвойство 'afs' не определено

Где afs - AngularFirestore

import { AngularFirestore, AngularFirestoreCollection , AngularFirestoreDocument} from '@angular/fire/firestore';

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы должны инициализировать его в конструкторе, затем вы сможете использовать его с this.afs , как вы пытаетесь.

Для примера:

constructor(private afs: AngularFirestore) { }

РЕДАКТИРОВАТЬ: изменить функциональное слово для использования функции стрелки:

this.afs.collection("users").get().toPromise().then( querySnapshot => {
      querySnapshot.forEach( doc => {
        // doc.data() is never undefined for query doc snapshots
        console.log(doc.id, " => ", doc.data());

        if (doc.data().email == email) {
          this.afs.collection("users").doc(doc.id).set({
            role: 2
          })
        }
      });
    });
0 голосов
/ 12 апреля 2019

Это должно работать

onChangeRole(email) {
  const usersColl = this.afs.collection("users");
  usersColl.get().toPromise().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      console.log(doc.id, " => ", doc.data());
      if (doc.data().email == email) {
        usersColl.doc(doc.id).set(
          { role: 2 },
          { merge: true }
        )
      }
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...