Angular 如何让订阅等待呼叫完成

Angular 如何让订阅等待呼叫完成,angular,get,rxjs,httpclient,Angular,Get,Rxjs,Httpclient,插入说明:这个问题与大多数其他与“如何从异步调用返回响应?”相关的问题不同,因为它使用SUBSCRIBE。据我所知,subscribe告诉它在这个东西被更改时做一些事情,因此您不能将代码放在subscribe中,因为它只有在被更改时才会运行(这总是太晚了)。请仅在您了解Angular、Subscribe和HttpClient的情况下回答。我原来的问题是: 我遇到了一个问题,我在数组中循环,并对数组中的每个项执行get调用。我的问题是,所有这些get请求都是异步发生的,这意味着它们都试图在前一个g

插入说明:这个问题与大多数其他与“如何从异步调用返回响应?”相关的问题不同,因为它使用SUBSCRIBE。据我所知,subscribe告诉它在这个东西被更改时做一些事情,因此您不能将代码放在subscribe中,因为它只有在被更改时才会运行(这总是太晚了)。请仅在您了解Angular、Subscribe和HttpClient的情况下回答。我原来的问题是:

我遇到了一个问题,我在数组中循环,并对数组中的每个项执行get调用。我的问题是,所有这些get请求都是异步发生的,这意味着它们都试图在前一个get仍在接收响应时获取。这会导致错误。下面是一个粗略的例子:

 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个响应…这是我要寻找的顺序