[英]Uncaught (in promise): TypeError: You provided using Observable.from()
I have a function below which returns the result as a promise and want to convert it to observable to process it further.我在下面有一个函数,它将结果作为承诺返回,并希望将其转换为 observable 以进一步处理它。
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;
};
}
And the Observable function:和 Observable 函数:
canActivate(): Observable<boolean> {
const observable = from(this.authService.isAuthenticated());
return observable.pipe(
tap(authenticated => {
if (!authenticated) {
this.router.navigate(['/auth/sign-in']);
}
}),
);
}
It throws an error:它抛出一个错误:
Error: Uncaught (in promise): TypeError: You provided '() => Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { const payload = JSON.parse(sessionStorage.getItem('token')); const isExpired = (payload === null || payload === void 0 ? void 0 : payload.token) ? this.helper.isTokenExpired(payload.token) : true; const isAuthenticated = yield this.nbAuthService.isAuthenticated().toPromise(); return !isExpired && isAuthenticated;
错误:未捕获(承诺):类型错误:您提供了 '() => Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { const payload = JSON.parse(sessionStorage.getItem ('token')); const isExpired = (payload === null || payload === void 0 ? void 0 : payload.token) ? this.helper.isTokenExpired(payload.token) : true; const isAuthenticated = yield this.nbAuthService.isAuthenticated().toPromise(); return !isExpired && isAuthenticated;
Blockquote块引用
ok how about you change your isAuthenticated function to return an observable like below好的,您如何更改 isAuthenticated 函数以返回如下所示的 observable
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); })
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.