加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 如何从subscribe返回observable

发布时间:2020-12-17 08:02:29 所属栏目:安全 来源:网络整理
导读:当我在订阅者中获得某个值时,我正试图返回一个observable,但我失败了。 这是代码: canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observableboolean { // get route to be activated this.routeToActivate = route.routeConfig
当我在订阅者中获得某个值时,我正试图返回一个observable,但我失败了。

这是代码:

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observable<boolean> {
    // get route to be activated
    this.routeToActivate = route.routeConfig.path;

    // get user access levels        
    return this._firebase.isUserAdmin          <-- returns Subscription,not Observable
        .map(user => user.access_level)
        .subscribe( access => {
           // I need to return an observable here
        });
}

角度2中的可观察量资源不多,所以我不知道从哪里开始。有人可以帮忙吗?

更新 – >工作版

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observable<boolean> {
            // get route to be activated
            this.routeToActivate = route.routeConfig.path;

            // get user access levels        
            return this._firebase.isUserAdmin
                .map(user => {
                    let accessLevel = user.access_level;

                    if (accessLevel === 'admin' ) {
                        return true;
                    }

                }).first();
        }
您无法从订阅返回observable,但如果您使用map而不是subscribe,则返回Observable。
canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observable<boolean> {
    // get route to be activated
    this.routeToActivate = route.routeConfig.path;

    // get user access levels        
    return this._firebase.isUserAdminObservable
        .map(user => {
           // do something here
           // user.access_level;
           return true;
         })
        .first(); // for the observable to complete on the first event (usually required for `canActivate`)
        // first needs to be imported like `map`,...
}

canActivate(route: ActivatedRouteSnapshot,state: RouterStateSnapshot):Observable<boolean> {
    // get route to be activated
    this.routeToActivate = route.routeConfig.path;

    let subject = new Subject();
    // get user access levels        
    this._firebase.isUserAdminObservable
        .map(user => {
          let accessLevel = user.access_level; 
          if (accessLevel === 'admin' ) { 
            subject.emit(true); 
            subject.complete();
          } 
          return user;
        });
     return subject;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读