首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从回调中创建一个可观察对象

从回调中创建一个可观察对象
EN

Stack Overflow用户
提问于 2017-03-31 10:00:44
回答 3查看 12.9K关注 0票数 12

我有一个身份验证保护,当站点被访问并且用户已经登录时,它需要一个异步响应true/false。

我使用的是Firebase的onAuthStateChanged (link to docs),它使用了一个回调函数。如何将我的isLoggedIn()方法转换为可以返回Observable<boolean>的方法

Typscript:

代码语言:javascript
复制
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;
      });

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-31 10:16:54

你可以这样做。

代码语言:javascript
复制
get isLoggedIn(): Observable<boolean> {

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

Stack Overflow用户

发布于 2019-01-30 00:11:38

还有一种方法可以使用rxjs/observable/bindCallback中的bindCallback来完成此操作

代码语言:javascript
复制
const observable=bindCallback(functionWhichExpectsCallBack)

e.g

代码语言:javascript
复制
function foo(value, callback) {
  callback(value);
}
//converts callback to observable
    const observable = bindCallback(foo); 
    observable(1)
      .subscribe(console.log); 
票数 12
EN

Stack Overflow用户

发布于 2020-12-23 23:06:52

注意:bindCallbackObservable.create已被弃用,

您可以改用new Observable

代码语言:javascript
复制
...
return new Observable((subscriber) => {
  firebase
    .auth()
    .onAuthStateChanged((user) => {
      subscriber.next(user);
    })
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43131162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档