我有一个应用,在很多地方我们可以执行请求后的呼叫。
但是,在应用程序的某个位置,调用被执行两次:
我有服务
PostNewStory(params:API_TYPE.post_new_item_history_call){
let observable$ = this._http.Get(UtilsService.apiServer + '/post_new_item_history', params)
let subscription = observable$.subscribe((data:any) =>{
//do stuff
subscription.unsubscribe();
});
return observable$;
}
我的组件中有
PostComment(){
const params = {
//params
};
this._itemDetailsService.PostNewStory(params).subscribe((data:post_new_item_history_response) => {
this.ResetCommentArea();
});
}
我有一个HttpService,如下所示
public Post<T>(url: string, payload: any): Observable<T>;
public Post<T>(url, payload): Observable<T> {
return this.http.post<T>(url, payload, httpHeaders)
.pipe(
retry(MAX_RETRY)
)
}
我检查过,这在任何地方都可以正常使用,每个函数都称为一次,并且只有一次。如果我在这里放日志=>
public Post<T>(url: string, payload: any): Observable<T>;
public Post<T>(url, payload): Observable<T> {
console.log("MyLog")
return this.http.post<T>(url, payload, httpHeaders)
.pipe(
retry(MAX_RETRY)
)
}
我只有一个日志。但是通话进行了两次?
答案 0 :(得分:2)
您要对http请求进行两次可观察的访问,一次是在PostNewStory
中,然后返回可观察的,然后在PostComment
中再次对其进行订阅。
尝试这样的事情:
PostNewStory(params:API_TYPE.post_new_item_history_call){
let observable$ = this._http.Get(UtilsService.apiServer + '/post_new_item_history', params)
return observable$.pipe(
map((data: any) => {
// do stuff
return dataNeededInPostCommentMethod;
}),
);
}