我有下面的代码,它以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.2
和Angular8
。 C#方法为async
。
如何在一个循环中发布所有100个元素?
答案 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
})
}