[英]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.