Angular 如何让订阅等待呼叫完成
插入说明:这个问题与大多数其他与“如何从异步调用返回响应?”相关的问题不同,因为它使用SUBSCRIBE。据我所知,subscribe告诉它在这个东西被更改时做一些事情,因此您不能将代码放在subscribe中,因为它只有在被更改时才会运行(这总是太晚了)。请仅在您了解Angular、Subscribe和HttpClient的情况下回答。我原来的问题是: 我遇到了一个问题,我在数组中循环,并对数组中的每个项执行get调用。我的问题是,所有这些get请求都是异步发生的,这意味着它们都试图在前一个get仍在接收响应时获取。这会导致错误。下面是一个粗略的例子:Angular 如何让订阅等待呼叫完成,angular,get,rxjs,httpclient,Angular,Get,Rxjs,Httpclient,插入说明:这个问题与大多数其他与“如何从异步调用返回响应?”相关的问题不同,因为它使用SUBSCRIBE。据我所知,subscribe告诉它在这个东西被更改时做一些事情,因此您不能将代码放在subscribe中,因为它只有在被更改时才会运行(这总是太晚了)。请仅在您了解Angular、Subscribe和HttpClient的情况下回答。我原来的问题是: 我遇到了一个问题,我在数组中循环,并对数组中的每个项执行get调用。我的问题是,所有这些get请求都是异步发生的,这意味着它们都试图在前一个g
this.MyArray = [1, 2, 3, 4, 5];
this.MyArray.forEach(element => {
this.httpClient.get('http...')
.subscribe(
(response: any) => {
})
)}
如何让forEach循环等待调用响应,然后再转到循环中的下一项?我试着查看响应,但我就是不明白:(您可以将数组映射到可观察的流中。然后您可以使用
concat
操作符执行一行中的可观察内容
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
})
导入{
海螺
}来自“rxjs/observable/concat”;
this.MyArray=[1,2,3,4,5];
const observables:Observable[]=this.myArray.map(()=>this.httpClient.get('http…');
concat(…可观测)。订阅(resp=>{
//处理响应,它们将一个接一个地执行,
//每个都在等待前一个完成
})
试试这个
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()
}
})
}
this.totalCount=this.MyArray.length;
这个。i=1;
getData(){
设ob=this.MyArray[this.i-1];
this.httpClient.get('http…'))
.订阅(
(答复:任何)=>{
这个.i++;
如果(this.i执行时会出现哪个错误?这是一个承诺可观察的问题。除非您知道可观察的将返回什么,否则我看不到解决方案。我认为这对Tomasz不起作用。这里发生的是,所有get调用一个接一个地完成,然后它们的subscribe值一个接一个地填充。因此,您的顺序是4个get呼叫,然后4个订阅响应。不是1个get,1个响应,1个get,1个响应…这是我要寻找的顺序