从回调中创建一个Observable

时间:2017-03-31 02:00:44

标签: javascript angular firebase firebase-authentication rxjs

我有一个auth防护,当访问该站点并且用户已经登录时,需要异步响应true / false。

我使用的是Firebase的onAuthStateChangedlink to docs)并且它使用了回调函数。如何将isLoggedIn()方法转换为可以返回Observable<boolean>的内容?

Typscript:

get isLoggedIn(): Observable<boolean> {

    // want something like this:
    return Observable.fromCallback(firebase.auth().onAuthStateChanged).map(user => !!user);

    // this returns () => boolean, but I need a promise or observable
    return firebase
      .auth()
      .onAuthStateChanged((user) => {
        return !!user;
      });

}

3 个答案:

答案 0 :(得分:7)

你可以这样做。

get isLoggedIn(): Observable<boolean> {

  // want something like this:
  return Observable.create(
    observer => firebase
        .auth()
        .onAuthStateChanged((user) => {
          observer.next(!!user)
        });
    );
}

答案 1 :(得分:0)

还有另一种使用rxjs / observable / bindCallback中的bindCallback进行此操作的方法

const observable=bindCallback(functionWhichExpectsCallBack)

例如

function foo(value, callback) {
  callback(value);
}
//converts callback to observable
    const observable = bindCallback(foo); 
    observable(1)
      .subscribe(console.log); 

答案 2 :(得分:0)

注意:bindCallbackObservable.create 已被弃用,
您可以改用 new Observable

...
return new Observable((subscriber) => {
  firebase
    .auth()
    .onAuthStateChanged((user) => {
      subscriber.next(user);
    })
}