takeUntil
оператор завершает наблюдаемое, как только завершается предоставленная наблюдаемая. Поскольку ajax()
наблюдаемый излучает один раз, нет необходимости в takeUntil
.
Перенаправление является побочным эффектом. Побочные эффекты рекомендуется выполнять в операторе tap
.
Также часто имеет смысл предоставлять побочный эффект перенаправления в соответствующем эпосе:
import { tap, ignoreElements } from "rxjs/operators";
const loginEpic = action$ =>
action$.pipe(
ofType(LOGIN_USER),
mergeMap(action =>
ajax({
url: `${BASE_URL}/auth/login`,
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: action.payload
}).pipe(
map(response => loginUserFulfilled(response)),
catchError(error =>
of({
type: LOGIN_USER_REJECTED,
payload: error.xhr.response,
error: true
})
)
)
)
);
const loginRedirectEpic = action$ =>
action$.pipe(
ofType(LOGIN_USER_FULFILLED),
tap(() => history.push("/stuff")),
ignoreElements(),
);