Возвращаемое значение обещания от наблюдателя - PullRequest
2 голосов
/ 26 мая 2020

Я хочу написать вспомогательную функцию, которая возвращает идентификатор токена пользователя firebase. Мне удалось получить токен firebase с помощью этого подхода, но у меня возникли проблемы с возвратом значения обещания (идентификатора токена) из функции наблюдателя onAuthStateChange в функции, которые вызывают вспомогательный метод getToken(). Я очень новые обещания и буду очень признателен за любую помощь. Вот что у меня получилось.

export function getToken (){
  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
      user.getIdToken().then(token => {
        return token // Managed to get the valid token
      })
    } else {
    }
  });
}

Ответы [ 3 ]

1 голос
/ 26 мая 2020

Слушатели / наблюдатели состояния Firebase Auth не могут возвращать значение из функции. Они вызываются при каждом изменении состояния. Если вы хотите продолжить некоторую работу при изменении состояния, вы должны сделать это в самом слушателе, возможно, вызвав другую функцию.

1 голос
/ 26 мая 2020

Прежде всего, onAuthStateChanged() является прослушивателем событий, как вы упомянули, поэтому подписываться на него каждый раз, когда вызывается метод getToken(), не является хорошей идеей.

I не верьте, что можно создать одну функцию «magi c» для достижения того, что вы хотите.

Я понимаю, что вы ищете способ «подождать», пока токен firebase получит значение , но нет, это невозможно, потому что, если состояние пользователя отключено, событие не будет инициировано, пока он не войдет в систему, поэтому обещание не имеет смысла. Если бы такое обещание существовало, оно было бы неразрешимым навсегда, если бы пользователю просто не хотелось входить в систему.

Вот почему вместо обещания у нас есть прослушиватель событий. Как сказал другой ответчик, лучший способ - действовать в соответствии с фактическим событием. Например, вы можете транслировать сообщение по всему приложению, установить глобальное состояние и т. Д. c. которые, в свою очередь, можно прослушивать и использовать в соответствующих компонентах.

0 голосов
/ 26 мая 2020

Если должно закрыться. Если вы вернули, когда значение истинно, вы также должны вернуть что-то, когда этого нет в инструкции else.

...