我有一个简单的服务,它发布数据并返回true,否则抛出错误。
首先通过getUserById获取用户数据,它返回Promise(User Derail(
然后 concatMap 并调用其他方法并返回结果 true!
// I want it's return type to be Observable<boolean>
saveUser(record: any): Observable<any> {
return from(this.getUserById(1))
.pipe(concatMap((data: any) => {
// Some other code....
return this.httpClient.post(`${this.API_URL}/users`, record)
.pipe(
map((result: any) => {
console.log(result);
return true;
}),
catchError(error => this.handleError(error))
)
}));
}
我想要,它的返回类型是可观察的,但是当我更改为可观察布尔值时,立即开始出现错误。
刚刚在 [stackblitz.com/][1] 上创建了示例代码,看到我可以解决这个问题吗?
注意:除了saveUser(record: any)
,我无法更改任何方法
你可能会尝试做这样的事情:
myObs: Observable<boolean> = isUserAllowed()
和
this.utilityService.CheckFeature(userDetail);
返回Observable<boolean | {}>
所以myObs
不知道当{}
到达时会发生什么。
您需要将返回值转换为特定Observable<boolean>
以便 TypeScript 知道。
像这样:
this.utilityService.CheckFeature(userDetail) as Observable<boolean>
检查这个: https://stackblitz.com/edit/angular-bw7hf2
最后,我使该函数像承诺一样工作,然后使用并使用from()
包装整个函数以返回为可观察的。
isUserAllowed(): Observable<any> {
return from(this.getData().then((userDetail: UserData) => {
return this.utilityService.CheckFeature(userDetail);
}), catchError(error => this.handleError(error)));