【问题标题】:Sending two http request one after another一个接一个地发送两个http请求
【发布时间】:2022-11-02 18:20:00
【问题描述】:
我有 2 个 api 调用,我想一个接一个地发送。
我需要第一个响应来发送第二个 api 请求,但我还需要第一次调用的数据。看起来 switchMap 是要走的路,atm 看起来像这样:
this.apiCall1().pipe(switchMap(res1 => this.apiCall2(res.data))).subscribe(res => ...)
但我需要将 res1.differentData 分配给 switchMap 似乎不可能的变量。或者我只是缺少一些语法。
【问题讨论】:
标签:
javascript
angular
rxjs
【解决方案1】:
我建议您重新发送来自apiCall1() 的值并使用forkJoin 在最后获取两个值:
this.apiCall1().pipe(
switchMap(res => forkJoin(
[of(res), this.apiCall2(res)]
))).subscribe(console.log)
这样,您最后会收到一个包含两个元素(两个调用的结果)的数组。
【解决方案2】:
如果我自己不运行代码,这是我的看法。
可能打破你的回调函数:
let res1Stored;
this
.apiCall1()
.pipe(switchMap(res1 => {
res1Stored = res1.differentData;
return this.apiCall2(res.data);
}))
.subscribe(res => ...)
希望这可以帮助。
【解决方案3】:
您还可以使用映射到内部调用以包含来自外部的全部或部分响应(通常用于典型的元素+细节)
this.apiCall1().pipe(
switchMap(res1 => this.apiCall2(res1).pipe(
map(res2=>({res1:res1,res2:res2})))
)