在 运行 之前如何等待对我的控制器的每个服务调用到 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 ))
我有一个这样的 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 ))