Javascript RxJs扩展方法导致额外的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

我使用以下方法发送多个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 => ({...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),
减少((会计科目,项目)=>([…会计科目,…项目])
)
.订阅(结果=>{
这就是结果;
});    
}