Я попробовал подход здесь, где я разделяю на две наблюдаемые, отправляю $ и 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
});