Angular 2 HttpClient 删除集合

Angular 2 HttpClient Delete collection

我有一个看起来像这样的服务:

delete<T>(id: number): Observable<T> {
   return this.http.delete<T>(this.url + '/delete/' + id)
          //etc
          //etc
}

现在,我想在不耗尽数据库的情况下从 forEach 循环调用此方法。

理论上,我可以像这样递归地尝试:

doDeletion(index){
    service.delete()
           .subscribe(success => doDeletion(++index), 
                      err => doDeletion(++index));
}

但是,这似乎不是正确的方法。 forkJoin 属性 是否适用于此?如何在不杀死数据库的情况下在每次调用之前等待?

谢谢

这实际上取决于您期望的输入,但通常您可以使用 concatMap 始终等待当前内部 Observable 完成:

const ids = [42, 24, 17, 1337];

Observable.from(ids)
  .concatMap(id => this.http.delete<T>(this.url + '/delete/' + id))
  .subscribe();

前一个完成后 运行 每个 delete()

您提到您可能想要使用递归。例如,如果一个 delete() 调用 returns 另一个您想要 delete() 的 ID。对于递归调用它的回调的 expand() 运算符来说,这似乎是一件好事:

Observable.of(id)
  .expand(id => id
    ? this.http.delete(this.url + '/delete/' + id).map(...) // map the response into another id
    : Observable.empty()
  )
  .subscribe();