【发布时间】:2021-02-05 01:20:15
【问题描述】:
Angular 10,创建一个返回 Observable 的服务方法(User 是我创建的自定义对象)。我希望添加(一个可观察的)服务方法,它会告诉我服务是否启动并运行,如果没有,我想返回一个不同的 Observable,这个是从本地资源加载的。
伪代码:
if(serviceRunning()){
return getUserFromService();
}else{
return getUserFromLocalResource();
}
我的实际方法(这些都驻留在我的 UserService 模块中,并从我的控制器方法中调用):
serviceRunning() {
// Calls service method serviceRunning which returns boolean.
return this.http.get<boolean>(this.nodeUserSvcUrl + 'api/serviceRunning');
}
getUser(name: string): Observable<User> {
if (this.serviceRunning()) { // Pseudo code...this line obviously does not work
// Return user data from service
return this.http.get<User>(this.nodeUserSvcUrl + 'api/users/' + name);
} else {
// Return data from local resource
return this.getStaticUser();
}
}
// Get local user data
getStaticUser() {
return this.http.get<User>(this.usersUrl + 'users.json');
}
我尝试了无数的 mergeMap、forkJoin、concatMap 代码,但都没有奏效。最接近的解决方案与此类似:(Angular4 how to chain forkJoin with flatMap),但他没有返回 Observable - 我需要。因此,我觉得我无法像他的代码那样订阅 forkJoin/concatMap 结果。
任何帮助将不胜感激!
更新: 根据 Sivakumar 在下面的回复,这是我的实际实现,供可能需要的人使用:
getUser() {
return this.serviceRunning().pipe(
switchMap(val => {
var tmp: Observable<User>;
val ?
tmp = this.http.get<User>(this.nodeUserSvcUrl + 'api/users/' + name)
:
tmp = this.getStaticUser();
return tmp;
})
);
}
【问题讨论】: