我来自一个angularjs世界,起初之前我能做的事似乎是翻译但是在检查网络之后,我正在接听多个电话。
在anguylarjs中,我会在服务中做到这样的事情:
function call(){
if(service.promise){
return service.promise
};
service.promise = http.get(...)
.then(function(){
...
return ...;
}, function(){
...
});
return service.promise;
}
要打电话就很简单
call(); //fires the http call
call(); //does not fire the http call again
我尝试用角度中的observable复制它,但http调用总是为每个订阅触发:
call(): Observable<...>{
if(service.observable){
return service.observable;
}
service.observable = this.httpClient.get<...>(...)
.flatMap(data => {
...
return of(...);
});
return service.observable;
}
因此,如果我订阅了两次,它总是在进行http调用
call() //fires the http call
.subscribe((data) => {
console.log(data);
})
call() //fires the http call again
.subscribe((data) => {
console.log(data);
})
我也可以在这里做反模式。
答案 0 :(得分:0)
根据@JB Nizet在上述评论中的建议,我重新调整了对此的呼吁:
call(): Observable<...>{
if(service.observable){
return service.observable;
}
service.observable = this.httpClient.get<...>(...)
.pipe(
map(data => {
...
return ...;
}),
shareReplay(1)
);
return service.observable;
}