Ожидание получения данных, Angular и Firebase - PullRequest
0 голосов
/ 10 февраля 2020

Это код:

      signIn(email, password) {
        let result = true;
        firebase.auth().signInWithEmailAndPassword(email, password).catch(error => result = false);
        waits(100);
        return result;
      }

У меня есть служба, которая содержит этот метод выше, но return работает до получения данных из firebase. Как я могу это исправить?

РЕШЕНИЕ

login.component.ts

  login() {
    this.loggedService.signIn(this.email, this.password).then(value => {
      console.log(value);
      if (value.user !== undefined) {
        this.loggedService.logged = true;
        this.router.navigateByUrl('account');
        console.log(1);
      }
    }).catch(error => {
      console.log(error);
    });

  }

logged.service.ts

  signIn(email, password) {
    return firebase.auth().signInWithEmailAndPassword(email, password);
  }

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020
let result = false;

signIn(email, password) {

            firebase.auth().signInWithEmailAndPassword(email, password)
                                    .subcribe( res => {if(res) result = true})
                                    .catch(error => result = false);
          }
0 голосов
/ 10 февраля 2020

Это посылает обещание:

  signIn(email, password) {
      return firebase.auth().signInWithEmailAndPassword(email, password);
  }

А потом, когда вы звоните, делайте:

serviceName.signIn.then({
  //excute your stuff
}).catch({
  // wrong pass or email
});
0 голосов
/ 10 февраля 2020

Поскольку firebase auth возвращает promise, поэтому вы можете использовать await для ожидания завершения запроса:

async signIn(email, password) {
        let result = true;
        await firebase.auth().signInWithEmailAndPassword(email, password).catch(error => result = false);
        return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...