Оператор завершения не вызывается при переносе - PullRequest
1 голос
/ 03 октября 2019

Я использую угловой сервис, чтобы обернуть некоторые из моих http-вызовов, чтобы управлять состоянием загрузки моего приложения.

Этот сервис хранит статус вызовов для дальнейшего процесса. К сожалению, функция finalize никогда не вызывается.

Вот обертка:

searchWithLoader(obs: Observable<any>) {
   this.show();
   obs.pipe(finalize(() => {
      console.log("FINALIZE NOT CALLED");
      this.hide();
   }));

   return obs;
}

И способ, которым я обычно называю это:

   let performanceLoader = this.loaderService.searchWithLoader(
      this.performanceDataService.getSomething({
        x: x,
        y: y,
      }));

    performanceLoader.subscribe(() => {});

Есть ли способ обойтиэто для того, чтобы финал вызывался в сервисе вместо компонента?

Ответы [ 2 ]

4 голосов
/ 03 октября 2019

Когда вы вызываете функцию конвейера наблюдаемого, она не изменяет наблюдаемое. Вместо этого он возвращает новую наблюдаемую. Поэтому вы должны установить obs для obs.pipe (), как показано ниже

searchWithLoader(obs: Observable<any>) {
   this.show();
   return obs.pipe(finalize(() => {
      console.log("FINALIZE NOT CALLED");
      this.hide();
   }));      
}
1 голос
/ 03 октября 2019

Ваш код

 this.performanceDataService.getSomething({
        x: x,
        y: y,
      }))

Это не наблюдаемое, оно должно быть наблюдаемым, когда вы передаете его функции searchWithLoader. Если вы не можете показать код для getSomething, мы можем помочь вам больше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...