RxJ вызывают вызов наблюдаемого при ошибке и повторяют шаги - PullRequest
2 голосов
/ 28 марта 2019

У меня есть наблюдаемое, которое отправляет форму submit$. Это наблюдаемое может закончиться ошибкой с кодом состояния 403, что означает, что пользователь не авторизован и должен войти в систему первым.

Есть ли способ, где я мог бы на конкретном коде ошибки вызвать другую наблюдаемую, которая выполняет процесс авторизации. Когда авторизация прошла успешно, я хочу повторить submit$, не заставляя пользователя снова вызывать это наблюдаемое.

Чтобы проиллюстрировать шаги, которые я хочу иметь:

  1. Пользователь пытается отправить сообщение, а submit$ подписывается
  2. Это заканчивается ошибкой с кодом состояния 403
  3. Наблюдаемые вызовы другого authorise$ наблюдаемого, который имеет собственный рабочий процесс
  4. Когда authorise$ завершается успешно, submit$ вызывается снова
  5. Процесс завершается с успехом или ошибкой
  6. Если во время authorise$ произошла ошибка, прервите submit$ процесс

1 Ответ

0 голосов
/ 28 марта 2019

Я попробовал подход здесь, где я разделяю на две наблюдаемые, отправляю $ и authenticationSubmit $, а затем снова объединяю их. Я не проверял это, и я пишу http.post (...) дважды, так что это не совсем то, что вы описали.

import { merge } from 'rxjs';
import { filter, switchMap } from 'rxjs/operators';

...

const submit$ = http.post(...);

const authenticationAndSubmit$ = submit$.pipe(
  filter(httpResponse => httpResponse.status === 403),
  switchMap(() => authService.login()),
  filter(authResult => authResult === 'success'),
  switchMap(() => http.post(...))
);

merge(submit$, authenticationAndSubmit$)
  .pipe(
    filter(httpResponse => httpResponse.status === 200),
  )
  .subscribe(httpResponse => {
    // Do something
  });
...