在 运行 之前如何等待对我的控制器的每个服务调用到 Angular 中的循环中的下一个服务调用?

How can I wait for each service call to my controller before running through the next one in a loop in Angular?

我有一个这样的 Angular 服务调用

this.webService.add(id)
  .subscribe(result => {
    // do some stuff
  }, error => {
    // handle error
  });

// service
add(id: number): Observable < any > {
  return this.http.post(this.baseUrl + 'webservice/add/' + id, null);
}

如果我需要多次调用此方法,但我想确保在显示最终 success/failure 消息之前所有操作都已完成,我该怎么做?

递归方法是否合适,或者是否有更多 angular/javascript/callback 方法?

例如

for (let i = 0; i < someLength; i++) {
  this.webService.add(id)
    .subscribe(result => {
      // do some stuff
    }, error => {
      // handle error
    });
}
// now show if they all succeeded or if one failed!

我的控制器是这样异步的

[HttpPost("document/{id}")]
public async Task<IActionResult> Document(int id) {
   // do something
   var resultDto = await _webRepo.AddToWebService(info);
   return Ok(resultDto);
}

您正在寻找 forkJoin operator

此运算符在所有源可观察对象完成后立即接受多个可观察对象并returns一个新的可观察对象。你会像这样使用它:

const serviceCalls = yourArray.map(id => this.webservice.add(id));
forkJoin(... serviceCalls)
 .subscribe((results) => results.forEach( //do something with your results ))