Angular 5 http клиент, выполнить функцию по подписке - PullRequest
0 голосов
/ 01 июля 2018

Я хочу показать загрузчик при обработке http-запроса. Но у меня есть проблема, потому что спиннер звонил, когда я возвращаюсь наблюдаемым, даже если нет активных подписчиков. Как вызывать функцию showSpinner () только когда кто-то подписывается на http?

private request(type, args={}){
  this.showSpinner();
  return this.http.post(this.apiUrl+type,args);
}

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы можете заключить HTTP-вызов this.http.post в defer. Это пример RxJS 6:

import { defer } from 'rxjs';

private request(type, args={}){
  return defer(
    () => {
      this.showSpinner();
      return this.http.post(this.apiUrl+type,args);
    })
    .pipe(
      finalize(() => this.hideSpinner()),
    );
}
0 голосов
/ 01 июля 2018

Вы можете использовать функцию defer (), чтобы создать фактическую наблюдаемую только при вызове subscribe (), и, таким образом, показать счетчик в это время:

return defer(() => {
  this.showSpinners();
  return this.http.post(this.apiUrl+type, args);
});
...