调用服务时异步调用不起作用 - Angular 8

Posted

技术标签:

【中文标题】调用服务时异步调用不起作用 - Angular 8【英文标题】:Async call not working when calling service - Angular 8 【发布时间】:2021-08-19 00:51:44 【问题描述】:

在使用httpClient,post方法调用API服务时,同步不起作用,不等待响应返回

组件.ts

this.juiciosService.createJuicio(this.juicio).then(
    (res: any) => 
      if(res.ok == 200)
        Swal.fire(
          //position: 'top-end',
          icon: 'success',
          title: 'Cedula agregada con exito',
          showConfirmButton: false,
          timer: 2000
        )
        this.detalleJuicio(res.data)
      
      else 
        Swal.fire(
          //position: 'top-end',
          icon: 'success',
          title: 'No se pudo agregar la cedula',
          showConfirmButton: false,
          timer: 2000
        )
      
      this.spinnerService.hide();
    
  )

service.ts

  async createJuicio(juicio): Promise<Juicio> 
    console.log(juicio);
    const url = this.API_URL + 'juicios/Crearjuicios/';
    return await this.http
      .post<Juicio>(url, juicio).toPromise()
      .then(res => res)
  

【问题讨论】:

因为你使用的是 Promise#then 回调,所以你根本不需要 async/await。 【参考方案1】:

您可以将代码更改为:

async methodName()

  let res = await this.juiciosService.createJuicio(this.juicio);
  if(res.ok == 200)
     Swal.fire(
          //position: 'top-end',
          icon: 'success',
          title: 'Cedula agregada con exito',
          showConfirmButton: false,
          timer: 2000
     );
     this.detalleJuicio(res.data)
  
  else
   
   Swal.fire(
          //position: 'top-end',
          icon: 'success',
          title: 'No se pudo agregar la cedula',
          showConfirmButton: false,
          timer: 2000
        )
    
  

这样它就可以作为一个异步函数工作。

另外,不要忘记对其中一个函数进行异常处理。因为似乎如果您的 HTTP 调用失败,Spinner 将不会隐藏。

【讨论】:

以上是关于调用服务时异步调用不起作用 - Angular 8的主要内容,如果未能解决你的问题,请参考以下文章

调用函数时异步等待不起作用

与内部的另一个异步 api 调用反应 Native GeoLocation 不起作用

Angular 4 - 从子组件调用父方法不起作用

单元测试 NgRx 效果以确保调用服务方法 - 不起作用

在Angular中使用websocket发布api调用不起作用

带有 ChangeDetectionStrategy.OnPush 和异步管道的 Angular 2 Observable 不起作用