繁体   English   中英

角服务返回可从.then观察

[英]Angular service return Observable from .then

我正在尝试以服务方法返回当前身份验证状态。 (除了return之外,该代码有效。)我对.map中对.then的调用并不熟悉,而且我不知道如何返回Observable。

public getSignedInStatus(): Observable<boolean> {
        this._gauth.getAuth().map(auth => {
            auth.then(function() {
                return Observable.of(auth.isSignedIn.get());
            });
        });
    }

在文档中,有一个订阅呼叫。 我尝试将其更改为.map,但没有帮助。

this._gauth.getAuth()
        .subscribe(auth => {

错误是"A function whose declared type is neither 'void' nor 'any' must return a value."

我希望能够从任何组件调用该方法。 像这样:

return this._userService.getSignedInStatus()
      .map(
        signedIn => {    
          if (signedIn === true) {
            return true;
          } else {
            return false;
          }
        },
        error => console.error('Error getting user status')
      );

在AuthGuard中,如下所示:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    this._userService.getSignedInStatus()
    .subscribe( response => {
        const status = response.isSignedIn.get();
        if (status === true) {
           return true;
        } else {
           this.router.navigate(['/signin']);
           return false;
        }
    },
    error => {
       console.error('Error getting user status');
       return false;
    });
  }
}

这样的事情应该工作

public getSignedInStatus(): Observable<gapi.auth2.GoogleAuth> {
    return this._gauth.getAuth();
}

然后在您的路线守卫中,您订阅了可观察对象并返回

return this._userService.getSignedInStatus()
  .subscribe( response => {    
      return response.isSignedIn.get();
  },
  error => {
     return false
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM