在循环中请求http.post在Angular中不起作用

时间:2019-07-19 15:18:24

标签: angular angular8

我有下面的代码,它以100个元素的循环请求http.post,但是仅将数据保存在DB中以用于前一个或两个记录,其余则出现内部服务器错误。

post(data: any): Observable<any> {
    return this.http.post(myUrl, data);
  }

myMethod() {
  for (let i = 0; i < this.myJSON.length; i++) { // 100 elements
    // Some Business Logic and changing myForm values
    this.post(this.myForm.value).subscribe( dd => { this.saved++; });
  }
}

我尝试过但没有运气。

setTimeout(() => {
          this.post(this.myForm.value).subscribe( dd => { this.saved++; });
        }, 1000);

我的环境是Asp.Net Core 2.2Angular8。 C#方法为async

如何在一个循环中发布所有100个元素?

2 个答案:

答案 0 :(得分:1)

内部服务器错误是服务器错误。我会考虑发出一个请求并在服务器端执行所有元素的保存

答案 1 :(得分:0)

处理多个请求的最佳方法是使用rxjs的forkJoin。 forkJoin接受输入的Observable数组,然后在每个请求完成时返回响应。 在这种情况下:

 post(data: any): Observable<any> {
    return this.http.post(myUrl, data);
  }

  myMethod() {
    let callsToPerform: Observable<any>[] = [];
    for (let i = 0; i < this.myJSON.length; i++) { // 100 elements
      // Some Business Logic and changing myForm values
      callsToPerform.push(this.post(this.myForm.value));
    }

    forkJoin(callsToPerform)
      .subscribe(arrayOfResults => {
        // some operations
      })
  }