Есть ли способ запустить функцию onNext () и onError (), не вызывая ее явно в обоих обратных вызовах? - PullRequest
0 голосов
/ 13 февраля 2019

Я продолжаю писать код, который вызывает одну и ту же функцию очистки в обоих обратных вызовах, например:

lockDownStuff();

someHttpClientCall().subscribe((result: any) => {
    handleResult(result);
    unlockStuff();
}, (error: any) => {
    unlockStuff();
});

Когда я действительно хочу вызвать мою функцию, которая отключает мой глобальный счетчик, арендуемые поля формы и т. Д. Вмода больше похожа на это:

lockDownStuff();

someHttpClientCall().subscribe((result: any) => {
    handleResult(result);
    unlockStuffNoMatterWhat();
});

ИЛИ

someHttpClientCall()
  .subscribe((result: any) => {
    handleResult(result);
  })
  .finally((finally: any) => unlockStuff());

1 Ответ

0 голосов
/ 13 февраля 2019

В предположении, что наблюдаемое, возвращаемое someHttpClientCall, равно конечному (что означает, что в какой-то момент оно будет генерировать событие complete ), вы можете реализовать это, используя *Оператор 1006 * выглядит следующим образом:

import {finalize} from 'rxjs/operators';

someHttpClientCall()
  .pipe(finalize(()=> unlockStuff()))
  .subscribe(...);

Если это не так, вам нужно преобразовать бесконечный поток в конечный один, например, путем условного приема выбросов до тех пор, пока не будет выполнено какое-либо условие, используя takeUntil:

import {finalize, takeUntil} from 'rxjs/operators';

someHttpClientCall()
  .pipe(
     takeUntil(....),
     finalize(()=> unlockStuff())
  ).subscribe(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...