Angular 正在循环中请求http.post,该循环不工作

Angular 正在循环中请求http.post,该循环不工作,angular,angular8,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 B

我有下面的代码,它在一个包含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++; });
  }
}
我的环境是Asp.NETCore2.2和Angular8。C方法是异步的


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

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

 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
      })
  }

内部服务器错误是服务器错误。我想在服务器端

中提出一个请求并执行所有元素的保存,可能是因为您试图保存相同的值100次,并且该值包含一个应该唯一的字段。例如,PK?您是否通读了内部服务器错误?这是什么?所有这些约束在发布前都经过了反复检查。同样的数据也适用于单个帖子。看起来你在一次又一次地发布this.myForm.value。是这样吗?这与this.myJSON的长度有什么关系?在我的逻辑中,我得到myJSON[i],做我的验证,如果一切正常,将值打到myForm,然后调用http.post.Same issue,其行为没有变化如果100个不同的用户一次发布一条记录呢?它有用吗?我无法理解一次100个用户发帖和一个循环中单个用户发帖的区别。当您连续发出100个http请求时,您会强制浏览器和服务器打开和关闭http连接100次。这是一个额外的开销,可能会导致发生内部服务器错误,因为某些服务器对同时打开的连接有限制。我不知道这可能是由于并发冲突导致的与数据库相关的错误。当您发出一个请求时,您只打开一次连接,并将数据保存在一个数据库事务中,我希望这样会更高效,更不容易出错
 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
      })
  }