必须先完成对apiend点的Angular http请求,然后才能执行其他请求

时间:2019-03-11 18:33:48

标签: angular http

我有服务

export class FreteService {

  constructor(private http: HttpClient,
    private router: Router) { }

    recuperarFrete(dados_entrega: DadosEntrega): any{

      return this.http.post<DadosEntrega>(AppSettings.API_ENDPOINT + 'entrega/calcular-frete', dados_entrega, {observe: 'response'});

    }

}

它在组件ngOnInit上被调用

ngOnInit() {

  this.freteService.recuperarFrete(dados_entrega)


}

如果我导航到另一个组件,则对另一个组件的http请求将待处理,直到该请求完成为止。我注意到它是因为端点大约需要50秒才能返回结果。 http请求不应该是异步的吗?

1 个答案:

答案 0 :(得分:0)

我认为,销毁组件时,浏览器应取消第一个请求。我怀疑所提供的代码有问题,它缺少在OnDestroy中取消订阅的调用。您可能必须添加ngOnDestroy并从那里调用退订。这应该取消销毁组件时正在进行的请求。

class MyComponent implements onDestroy {
  private subscription: Subscription = Subscription.EMPTY;
  ngOnInit() {
    this.subscription = this.freteService.recuperarFrete(dados_entrega);
  }
  
  ngOnDestroy() {
    this.subscription.unsubscribe();
  }
}