Javascript Uncaught(承诺中):TypeError:您使用Observable.from()提供
我在下面有一个函数,它将结果作为一个承诺返回,并希望将其转换为observable以进一步处理它Javascript Uncaught(承诺中):TypeError:您使用Observable.from()提供,javascript,angular,Javascript,Angular,我在下面有一个函数,它将结果作为一个承诺返回,并希望将其转换为observable以进一步处理它 isAuthenticated(): () => Promise<boolean> { return async () => { const payload: any = JSON.parse(sessionStorage.getItem('token')); const isExpired = payload?.token ? this.helper.i
isAuthenticated(): () => Promise<boolean> {
return async () => {
const payload: any = JSON.parse(sessionStorage.getItem('token'));
const isExpired = payload?.token ? this.helper.isTokenExpired(payload.token) : true;
const isAuthenticated = await this.nbAuthService.isAuthenticated().toPromise();
return !isExpired && isAuthenticated;
};
}
isAuthenticated():()=>承诺{
返回异步()=>{
const payload:any=JSON.parse(sessionStorage.getItem('token');
const isExpired=payload?.token?this.helper.isTokenExpired(payload.token):true;
const isAuthenticated=等待此.nbAuthService.isAuthenticated().toPromise();
return!isExpired&&isAuthenticated;
};
}
以及可观测函数:
canActivate(): Observable<boolean> {
const observable = from(this.authService.isAuthenticated());
return observable.pipe(
tap(authenticated => {
if (!authenticated) {
this.router.navigate(['/auth/sign-in']);
}
}),
);
}
canActivate():可观察{
const observable=from(this.authService.isAuthenticated());
可观测返回管(
点击(已验证=>{
如果(!已验证){
this.router.navigate(['/auth/sign-in']);
}
}),
);
}
它抛出一个错误:
错误:未捕获(承诺中):类型错误:您提供了“()=>
对象(tslib_uu网页包_u导入的_模块_u0_uu[“u等待者”])(此,无效0,
空0,函数*(){
const payload=JSON.parse(sessionStorage.getItem('token');
const isExpired=(有效负载===null | |有效负载===void 0?void 0:payload.token)?this.helper.isTokenExpired(payload.token)
:正确;
const isAuthenticated=生成此.nbAuthService.isAuthenticated().toPromise();
return!isExpired&&isAuthenticated
大宗报价
好的,您如何更改isAuthenticated函数以返回如下所示的可观察值
isAuthenticated():Observable<boolean> {
return from(this.nbAuthService.isAuthenticated().toPromise())
.pipe(
map(isAuthenticated=>{
const payload: any = JSON.parse(sessionStorage.getItem('token'));
const isExpired = payload?.token ? this.helper.isTokenExpired(payload.token) : true;
return !isExpired && isAuthenticated); })
};
}
isAuthenticated():可观察{
从(this.nbAuthService.isAuthenticated().toPromise()返回)
.烟斗(
映射(已验证=>{
const payload:any=JSON.parse(sessionStorage.getItem('token');
const isExpired=payload?.token?this.helper.isTokenExpired(payload.token):true;
return!isExpired&&isAuthenticated);})
};
}
返回的是Promise not Observable。Promise
在您的原始代码中有以下内容。nbAuthService.isAuthenticated().toPromise();…nbAuthService是不同的服务吗?我的错..在这种情况下,您可以简单地让isAuthenticated函数返回Observable..参见上文