Javascript RxJs扩展方法导致额外的HTTP调用
我使用以下方法发送多个HTTP调用:Javascript RxJs扩展方法导致额外的HTTP调用,javascript,angular,http,rxjs,Javascript,Angular,Http,Rxjs,我使用以下方法发送多个HTTP调用: listEmployees() { of({ hasNext: true, pageIndex: 0, items: [] }).pipe( expand(data => this.employeeService.list(data.pageIndex+1, 100) //100 records for each call .pipe( map(newData => ({...newDa
listEmployees() {
of({
hasNext: true,
pageIndex: 0,
items: []
}).pipe(
expand(data => this.employeeService.list(data.pageIndex+1, 100) //100 records for each call
.pipe(
map(newData => ({...newData, pageIndex: data.pageIndex+1}))
)),
takeWhile(data => (data.hasNext|| data.pageIndex === 1)),
map(data => data.items),
reduce((acc, items) => ([...acc, ...items]))
)
.subscribe(result => {
this.employees = result;
});
}
但是,由于调用是在第一步进行的,takeWhile
仅在下一个HTTP调用完成后执行。但是我需要检查HTTP响应的hasNext
变量,然后决定发送下一个HTTP调用。为此,我试着做了一些类似的事情,但由于页面索引没有更改或其他原因,它不起作用
listEmployees() {
this.employeeService.list(data.pageIndex+1, 100).pipe( //100 records for each call
expand((data) => {
if(data.hasNext) {
return this.employeeService.list(data.pageIndex+1, 100);
} else {
return of(EMPTY);
}
})
.subscribe(result => {
this.employees = result;
});
}
我怎样才能解决这个问题?我认为应该使用第二种方法,修改第一种方法,以便它在检查条件后发送后续调用。任何帮助都将不胜感激。可能会在您的takeWile上设置包含标志
listedemployees(){
的({
哈斯奈特:没错,
页面索引:0,
项目:[]
}).烟斗(
展开(数据=>
this.employeeService.list(data.pageIndex+1100).pipe(
映射(newData=>({…newData,pageIndex:data.pageIndex+1}))
)
),
takeWhile(data=>data.hasNext,true),//Inclusive=true
映射(数据=>data.items),
减少((会计科目,项目)=>([…会计科目,…项目])
)
.订阅(结果=>{
这就是结果;
});
}