INSERT注意:这个问题与大多数其他问题不同,例如"如何从异步调用中返回响应?"因为它使用SUBSCRIBE。据我所知,subscribe告诉它在更改这个东西时做某事,因此你不能把代码放在subscribe中,因为它只会在它被改变时运行(这总是太晚了)。如果您了解Angular,Subscribe和HttpClient,请回答。现在我原来的问题是:
我遇到一个问题,我在数组中循环并对数组中的每个项执行get调用。我的问题是所有这些获取请求都是异步发生的,这意味着它们都会尝试获取而前一个获取请求仍在接收它们的响应。这会导致错误。这是一个粗略的例子:
this.MyArray = [1, 2, 3, 4, 5];
this.MyArray.forEach(element => {
this.httpClient.get('http...')
.subscribe(
(response: any) => {
})
)}
在继续循环中的下一个项目之前,如何让forEach循环等待调用响应?我试着查看回复,但我无法理解:(
答案 0 :(得分:1)
您可以将数组映射到可观察的流中。然后,您可以使用concat
运算符连续执行observable。
import {
concat
} from 'rxjs/observable/concat';
this.MyArray = [1, 2, 3, 4, 5];
const observables: Observable<any>[] = this.myArray.map(() => this.httpClient.get('http...'));
concat(...observables).subscribe(resp => {
// handle responses, they will execute one after another,
// each waiting for the previous one to finish
})
答案 1 :(得分:1)
试试这个
this.totalCount = this.MyArray.length;
this.i=1;
getData(){
let ob = this.MyArray[this.i-1];
this.httpClient.get('http...')
.subscribe(
(response: any) => {
this.i++;
if(this.i <= this.totalCount){
getData()
}
})
}