我正在处理一种情况,例如“要求在应用程序中的每个Post调用之前先调用一个Dummy get Api调用”。
注意:1.实际的帖子调用应在虚拟get调用完成后开始一次。 2。需要通过仅在服务文件中编辑代码来解决该问题。
这是我的问题,
Component.ts
this._service.dopost().subscribe(
data => { console.log(data); });
Service.ts
dopost() {
this._http.get(dammyUrl, body, {
observe: "response",
headers: headers
}).subscribe((responce)=>{
return this._http.post(url, body, {
observe: "response",
headers: headers
});
});
}
堆栈闪电链接
答案 0 :(得分:1)
您需要使用SwitchMap Operator
映射到可观察的,完整的先前内部可观察的,发出值。
dopost():SecondResponseType {
return this._http.get<InitialResponseType>('dammyUrl', {}, {
observe: 'response',
headers: {}
}).pipe(
switchMap((initialResponse: InitialResponseType) => this._http.post<SecondResponseType>('url', {}, {
observe: "response",
headers: {}
}))
});
}
一旦您订阅了depost()
方法2,请求就会随之执行。
如果使用HttpClientModule,则方法看起来更简单。实际上,HttpClientModule是HttpModule的包装器
dopost(): Observable<SecondResponseType> {
return this._http.get<SecondResponseType>('dammyUrl').pipe(
switchMap((initialResponse: InitialResponseType) => this._http.post<SecondResponseType>('url'))
});
}
答案 1 :(得分:0)
据我了解,在这种情况下您需要flatMap
RxJS operator。请参见下面的示例:
dopost() {
return this._http.get(dammyUrl, body, {
observe: "response",
headers: headers
}).pipe(flatMap(responce=>{
return this._http.post(url, body, {
observe: "response",
headers: headers
});
}));
}
并且您必须订阅问题中所述的dopost
方法。