我想防止重复的http通话。我对一个可观察对象有多个订阅,并且该可观察对象具有一个switchMap,它决定是否会有http调用:
getModules(): Observable<Module[]> {
return this.modules$.pipe(
switchMap((modules: Module[]) => {
if (!modules) {
return this.setModules(); // http call, returning observable
}
return this.modules$; // observable
})
);
}
然后在应用程序的不同组件中有多个订阅,调用此方法。如何防止多次http通话?我需要延迟调用http观察值,而不是延迟发出的值。
答案 0 :(得分:0)
只需将Observable
存储为public
服务属性,而不是在代码中的任何地方调用getModules().subscribe(...)
,因为这样做会实例化多个Observable
。
实际上,pipe
运算符会在每次调用时产生一个新的Observable
。
答案 1 :(得分:0)
这是我通过@Lazy Coder解决此问题的方法: 我为getModules()添加了一个“忙”标志,并让订阅处于打开状态,以便当http观察者更新源模块$时通知订阅者。
private getModules(): Observable<Module[]> {
return this.modules$.pipe(
switchMap((modules: Module[]) => {
if (!modules && !this.isBusy) {
return this.setModules(); // updates the modules$ source when complete
}
return this.modules$;
})
);
}