Вложенные обещания в Ionic 3 / Angular - PullRequest
0 голосов
/ 22 мая 2018

в настоящее время у меня есть провайдер аутентификации Firebase (Angularfire2), который будет выполнять вход пользователя

signInWithEmail(credentials) { return this.afAuth.auth.signInWithEmailAndPassword(credentials.email, credentials.pw); }

Я бы вызвал функцию на своей странице следующим образом:

login() { this.auth.signInWithEmail(credentials) .then( () => this.navCtrl.push(MainPage), (err) => { console.log("Return Code: " + err.code + " | Message: " + err.message); }); }

Однако теперь я хотел бы вложить обещание следующим образом:

signInWithEmail(credentials) {
    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)
      .then(() => {
        return this.afAuth.auth.signInWithEmailAndPassword(credentials.email, credentials.pw);
      }, (err) => {
      return Promise.reject(err); 
    });
  }

Это не работает, поскольку возвращается void, поэтому функция signInWithEmail не можетбольше вызываться в текущем порядке.

Каков наилучший подход для фактической обработки обещания setPersistence до того, как будет возвращено обещание signInWithEmailAndPassword?

Стоит ли просто вызывать метод setPersistence на самой странице вместо того, чтобы делать это в провайдере?

Заранее спасибо!

1 Ответ

0 голосов
/ 22 мая 2018

Я решил это, просто создав другой метод в своем провайдере для второго обещания:

enablePersistance() {
   return firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);
}

И связав обещания на моей странице:

this.auth.enablePersistance().then(() => {
  this.auth.signInWithEmail(credentials)
    .then(
    () => {
      console.log("Success");
    },
    (err) => {
      console.log("Return Code Login: " + err.code + " | Message: " + err.message);
    });
  }, (err) => {
  console.log("Return Code Enable Persistance: " + err.code + " | Message: " + err.message);
});
...