我在两个单独的组件中两次调用方法loadParticipant
,尽管将Observable保存在变量中,但几乎同时执行了两次,api被多次调用。该解决方案在AngularJs和Promises调用中有效,但是现在我当然想使用Observables:)
我试图在地图后添加去抖动时间并共享参数
return (this.loadParticipantObservable = this.sharedEndpoints.getParticipant().map((response) => {
this.loadParticipantObservable = null;
return (this.participant = response);
})).share().debounceTime(1000);
loadParticipant方法的实际代码
public loadParticipant(): Observable<DTO<PersonModel>> {
if (this.participant) {
return new BehaviorSubject<DTO<PersonModel>>(this.participant);
}
if (this.loadParticipantObservable) {
return this.loadParticipantObservable;
}
return (this.loadParticipantObservable =
this.sharedEndpoints.getParticipant().map((response) => {
this.loadParticipantObservable = null;
return (this.participant = response);
}));
}
示例我如何调用loadParticipant方法
this.sharedService.loadParticipant().subscribe((response: DTO<PersonModel>) => {
...
});
同时,Observable不为null,代码处于这种情况并执行
return this.loadParticipantObservable;
我将其检入调试器。
这只是我可以观察到的回报,但不幸的是,这段代码调用的代码更低,这从后端调用了真正的端点
答案 0 :(得分:0)
如果我不满意,我会尝试将获取和可视化逻辑分为两种,换句话说,可以使用两种方法进行服务:
方法I从后端
methodII为了从组件中获取数据(从上述变量中获取),
此后,我将在需要可视化所需数据的任何地方订阅methodII,将在最近的公共父级组件中调用服务器。
看看这个 rxjs 演示CodeSandbox,我认为它将帮助您了解我在说的事情:)
**注意:如果您可以负担得起,可以使用rxjs 5.5+,因为您将能够使用可管道运算符,这带来了一些好处,您可以在主题Pipeable operators article上查看一下
>**注2:如果您正在处理中型或大型项目,请检查ngrx,因为使用ngrx,与服务器调用和UI状态管理相关的所有麻烦都将消失。