我正试图找出一种方法来监控来自2个位置的HttpClient.Post
observable
的结果,而不会将数据发布到我的服务器两次。
我在这里创建了一个示例:https://stackblitz.com/edit/angular-aau9mg
目前我有app.service
从服务器获取数据,然后在返回数据时,设置一个值:
public getDump():Observable<any> {
var observable = this.http.get("https://angular-http-guide.firebaseio.com/courses.json");
observable.subscribe(
data => this.someValue = 99,
error => console.log(error)
);
return observable;
}
然后,在app.component
我要禁用帖子按钮(dumpInProgress
),然后在检索数据时,设置dump
。
getDump(){
this.appService.getDump().subscribe(
(data) => this.dump = data,
() => { },
() => this.dumpInProgress = false
);
}
因此,目前这完全符合预期,并取得了预期的效果。我遇到的问题是,如果您在单击获取转储按钮时检查网络日志,您将看到请求已进行两次!这是因为:
在您对该方法返回的observable上调用subscribe()之前,HttpClient方法不会开始其HTTP请求。对于所有HttpClient方法都是如此。 Source
那么可以在不进行第二次获取请求的情况下实现此结果吗?
答案 0 :(得分:1)
我认为你需要的只是map
功能:
public getDump():Observable<any> {
return this.http.get("https://angular-http-guide.firebaseio.com/courses.json").map(
data => { this.someValue = 99; return data; },
error => console.log(error)
);
}
2请求背后的原因是,
this.appService.getDump().subscribe(...) observable.subscribe(...)
这2行代码,您通过订阅两次拨打2个电话
<强> WORKING DEMO 强>