如何等待http请求获得响应,然后再处理角度7中的下一步

时间:2019-02-06 03:24:50

标签: javascript angular typescript angular6 angular-httpclient

我正在尝试构建应用程序,我在其中发送一个get请求以从组件获取数据。该请求将被调用,数据将被用于执行下一步。但是,它正在执行下一步,直到我得到服务响应。

这是我的服务文件:

  getSabhaListDetailsName(sabhaMandalName: string): Observable<any> {
const sabhaListDetailsNameURL = this.rooturl + 'sabhatypebysabhaname';
return this.http
  .post(sabhaListDetailsNameURL,{}, { params: { sabha_name: sabhaMandalName } })
  .pipe(map(this.extractData),
   catchError(this.handleError<any>('sabhaListDetailsNameURL')));

}

这是我的组件文件,我从那里调用服务

   this.sabhaService.getSabhaListDetailsName(element.sabha_id).subscribe(result => {
  this.tempRetrieveSabha = result.data.sabhaList;
  //return this.tempRetrieveSabha;
  //  });
  console.log(this.tempRetrieveSabha);
  this.tempRetrieveSabha.forEach(
    element1 => {
      console.log(this.tempRetrieveSabha);
      if (element1.sabha_type == element.sabha_type) {
        this.tempSabha_ID = element1.id;
        this.tempSabha_Type = element1.sabha_type;
        this.tempFollowup_ID = element.followup_id;
      }
    })
});

在遍历数组之前,如何等待http请求完成。

2 个答案:

答案 0 :(得分:0)

Rxjs的subscription方法将发出HTTP Ajax请求以触发API调用。您需要将Array循环移动到component中的subscription方法内。也可以请添加“ extractData”代码。

在当前代码中看不到任何问题。

答案 1 :(得分:0)

尝试实现异步和等待功能或承诺。

例如:

  async function getProcessedData(url) {
  let v;
  try {
    v = await downloadData(url); 
  } catch(e) {
    v = await downloadFallbackData(url);
  }
  return processDataInWorker(v);
}

引用: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function