如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]

Posted

技术标签:

【中文标题】如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]【英文标题】:How to wait for http request to get response before it process to next step in angular 7 [duplicate] 【发布时间】:2019-06-29 23:13:17 【问题描述】:

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

这是我的服务文件:

  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 请求完成。

【问题讨论】:

你可以试试async await 在订阅中移动 foreach 部分代码。 【参考方案1】:

Rxjs subscribe 方法会发出 HTTP Ajax 请求来触发 API 调用。您需要在组件的 subscribe 方法中移动 Array 循环。也请您添加“extractData”代码。

在当前代码中没有发现任何问题。

【讨论】:

这是我的提取数据:private extractData(res: Response) let body = res;返回正文 || ; 【参考方案2】:

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

例如:

  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

【讨论】:

以上是关于如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Angular 7 - 如何在某些响应状态代码上重试 http 请求?

angular中处理多个异步请求的方法汇总

Angular 2,轮询 http 请求并等待缓慢的响应

Angular 5 Universal 在服务器端渲染期间等待 http 请求返回

在 ngOnInit Angular 之前处理异步承诺

Angular 7 自动刷新不记名令牌