代码之家  ›  专栏  ›  技术社区  ›  asdf_enel_hak

在“从”rxjs6的回调中转换为承诺

  •  0
  • asdf_enel_hak  · 技术社区  · 7 年前

    Here

    然后,当我们准备就绪时,我们调用resolve(),如下所示:

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

    具体代码: here firebase认证github项目,

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

    和 here

    对于rxjs 6.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 回复  |  直到 7 年前
        1
  •  2
  •   jo_va    7 年前

    我不知道我是否完全理解您的问题,但是如果您试图从用户令牌返回一个可观察的流,那么以下可能会起作用:

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

    每当身份验证状态发生变化时,将在流上发送一个新的用户令牌。 希望这有帮助。

        2
  •  0
  •   Hitmands    7 年前

    那么...怎么样 bindCallback :

    bindCallback(firebase.auth().onAuthStateChanged)
      .subscribe(console.log);
    
    推荐文章