我有一个auth防护,当访问该站点并且用户已经登录时,需要异步响应true / false。
我使用的是Firebase的onAuthStateChanged
(link 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;
});
}
答案 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)
注意:bindCallback
和 Observable.create
已被弃用,
您可以改用 new Observable
:
...
return new Observable((subscriber) => {
firebase
.auth()
.onAuthStateChanged((user) => {
subscriber.next(user);
})
}