Rxjs zip 调用了两次 rest 调用
Rxjs zip with rest call called twice
我用过调用 HTTP get 请求、获取对象列表、获取对象的一个属性的不同值并调用另一个 HTTP 请求的用例,然后使用来自第二个 HTTP 请求的响应丰富对象。下面是我写的代码片段。
const retrieveData = this.http.get('/url1');
const retreiveNameMap = retrieveData.pipe(map(e=>KUtils.distinct(e)), switchMap(e=>this.http.get('/url2',e)));
const source = zip(retrieveData, retreiveNameMap).subscribe(e=>console.log(e));
然而,当我在浏览器中调试时,我注意到 url1
(第一个 HTTP 请求)触发了两个 HTTP 请求,如何避免调用 url1
两次?
它被 运行 两次,因为你调用它两次,一次是在 zip 中,一次是在 retrieveNameMap 的开头...你在这里根本不需要 zip。
const retrieveData = this.http.get('/url1');
const retreiveNameMap = retrieveData.pipe(
switchMap(e1=>this.http.get('/url2',KUtils.distinct(e1)).pipe(map(e2 => [e1, e2])))
);
const source = retreiveNameMap.subscribe(e=>console.log(e));
我用过调用 HTTP get 请求、获取对象列表、获取对象的一个属性的不同值并调用另一个 HTTP 请求的用例,然后使用来自第二个 HTTP 请求的响应丰富对象。下面是我写的代码片段。
const retrieveData = this.http.get('/url1');
const retreiveNameMap = retrieveData.pipe(map(e=>KUtils.distinct(e)), switchMap(e=>this.http.get('/url2',e)));
const source = zip(retrieveData, retreiveNameMap).subscribe(e=>console.log(e));
然而,当我在浏览器中调试时,我注意到 url1
(第一个 HTTP 请求)触发了两个 HTTP 请求,如何避免调用 url1
两次?
它被 运行 两次,因为你调用它两次,一次是在 zip 中,一次是在 retrieveNameMap 的开头...你在这里根本不需要 zip。
const retrieveData = this.http.get('/url1');
const retreiveNameMap = retrieveData.pipe(
switchMap(e1=>this.http.get('/url2',KUtils.distinct(e1)).pipe(map(e2 => [e1, e2])))
);
const source = retreiveNameMap.subscribe(e=>console.log(e));