问题描述
我正在尝试确定如何/是否可以将Promise拒绝转换为类型化的Observable。
我有一个具有这样功能的登录组件...
login() {
const login$ = this.authenticationService.login(this.loginForm.value)
login$
.pipe(
finalize(() => {
this.loginForm.markAsPristine();
this.isLoading = false;
}),untilDestroyed(this)
)
.subscribe(
(credentials) => {
log.debug(`${credentials.username} successfully logged in`);
this.router.navigate([this.route.snapshot.queryParams.redirect || '/'],{ replaceUrl: true });
},(error) => {
log.debug(`Login error: ${error}`);
this.error = error;
}
)
}
以及使用这种方法的身份验证服务...
login(context: LoginContext): Observable<Credentials> {
var data = {} as Credentials
// Call a method that returns a Promise
this.server.authenticate(LoginContext)
.then((result) -> {
data.username = result.user.username
data.token = result.accessToken
this.credentialsService.setCredentials(data,context.remember)
// Not sure what to do here...need to return data somehow as an Observable
// return data
})
.catch((err) => {
// Not sure what to do here either...need to bubble the err up so that it's caught in subscribe
// return throwError(err)
})
}
如果Promise解决了,如何返回Observable<Credentials>
,如果拒绝则冒出错误?
我知道,如果我将身份验证服务功能更改为返回Promise<Observable<Credentials>>
,就可以使所有工作正常,但是为了学习新事物,我试图弄清楚这是否可行。 / p>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)