Вызов функции, если свойство документа равно значению - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь проверить, имеет ли пользователь свойство isActive, установленное на false.Если это так, то мне нужно выйти из системы.Я знаю, что это не лучший способ сделать это, но это можно изменить позже.Я делаю следующее, но он говорит, что this не определено.Как я могу вызвать функцию из .then

signOut() {
  this.afAuth.auth.signOut()
    .then(() => {
      this.router.navigate(['/']);
    });
}

checkIfActive(id: string) {
  return this.afs.collection("users").doc(id).ref.get()
    .then(function(doc) {
      if (doc.exists) {
        if (doc.data().isActive === false) {
          this.signOut(); // <------ says 'this' is undefined
        }
      } else {
        console.log("No such document!");
      }
    })
    .catch(function(error) {
      console.log("Error getting document:", error);
    });
}

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы не можете использовать «this» в «Funtion () {}», потому что оно не входит в сферу его применения.Вы должны использовать стрелку "() => {}" Funtion.

checkIfActive(id: string) {
    return this.afs.collection("users").doc(id).ref.get()
      .then((doc) => {
          if (doc.exists) {
            if (doc.data().isActive === false) {
              this.signOut(): <------says 'this' is undefined
            }
          } else {
            console.log("No such document!");
          }
      }).catch(function(error) {
        console.log("Error getting document:", error);
      });
  }
0 голосов
/ 19 сентября 2018

Если вы хотите получить доступ к функции signOut из thenable, вам нужно использовать Arrow functions.

Вместо then(function(doc) { использовать then(doc => {.Это позволит this получить доступ к исходному контексту.

Функции стрелок лексически связывают свой контекст, так что это фактически относится к исходному контексту

checkIfActive(id: string) {
  return this.afs.collection("users").doc(id).ref.get()
    .then(doc => {
      if (doc.exists) {
        if (doc.data().isActive === false) {
          this.signOut();
        }
      } else {
        console.log("No such document!");
      }
    })
    .catch(function(error) {
      console.log("Error getting document:", error);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...