преобразовать, чтобы обещать в обратном вызове "от" rxjs6 - PullRequest
0 голосов
/ 23 января 2019

Здесь

Внутри этой внутренней функции мы выполняем нашу асинхронную обработку, а затем, когда мы готовы, мы вызываем resol () следующим образом:

var promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log("Async Work Complete");
    resolve();
  }, 1000);
});

Для конкретного кода: здесь проект github для аутентификации в firebase,

 getCurrentUser(){
    return new Promise<any>((resolve, reject) => {
      var user = firebase.auth().onAuthStateChanged(function(user){
        if (user) {
          resolve(user);
        } else {
          reject('No user logged in');
        }
      })
    })
  }

и здесь указано

Для rxjs6.0.0 использовать:

import { from } from 'rxjs';

var observableFromPromise =  from(promiseSrc);

Я мог бы себе представить, что решение будет

  getCurrentUser() {
    return from(firebase.auth().onAuthStateChanged(function (user) {
      user.getIdToken().then(x => {
        return x;
      })
    })
    )
  }

или

getCurrentUser() {
    firebase.auth().onAuthStateChanged(function (user) {
      return from(user.getIdToken());
    })

  }

Мой вопрос, что эквивалентно второйфрагмент кода для from выражения в обратном вызове?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

как насчет bindCallback :

bindCallback(firebase.auth().onAuthStateChanged)
  .subscribe(console.log);
0 голосов
/ 23 января 2019

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

getCurrentUser(): Observable<any> {
    return new Observable(observer => {
        firebase.auth().onAuthStateChanged(user => {
           user.getIdToken().then(token => {
               observer.next(token);
           }).catch(error => {
               observer.error(error);
           })
        })
    })
}

Каждый раз, когда изменяется состояние авторизации, новый токен пользователя будет отправлен в поток. Надеюсь, это поможет.

...