У меня есть установка с Angular 5 и Angular-redux для хранения Redux с эпосами и действиями.
Моя проблема возникает, когда я хочу отправить эпик fetchNodes.Если я аутентифицируюсь, он без проблем извлекает узлы, потому что это первый вызов.Но когда я сначала выполняю эпик / действие входа в систему, а затем экшн / эпик fetchNodes, вызов немедленно отменяется.Возможно, что поток (ActionsObservable-stream или HttpClient-stream) все еще открыт, когда я пытаюсь сделать новый вызов.
В этом сообщении мне посоветовали сделать httpClient-вызов сMergeMap, но он все равно не будет работать в первый раз.
fetchNodes = (action$: ActionsObservable<any>) => {
const fetchNodesFulfilled = payload => ({ type: NodesActions.FETCH_NODES_SUCCESS, payload });
return action$.pipe(
ofType(NodesActions.FETCH_NODES),
mergeMap(
({payload}) => {
let headers = new HttpHeaders({
'Authorization': 'basic ' + this.auth.user.getValue().token,
});
return this.http.get<Nodes>(`${ENV.apiUrl}/nodes`, { headers: headers })
.map(payload => fetchNodesFulfilled(payload.nodes[0]))
.catch((error) => {
return Observable.of({
type: NodesActions.FETCH_NODES_FAILED
})
});
})
).catch((error) => {
return Observable.of({
type: NodesActions.FETCH_NODES_FAILED
})
})
}
login = (action$: ActionsObservable<any>) => {
return action$.pipe(
ofType(SessionActions.LOGIN_USER),
mergeMap(
({payload}) => {
let headers = new HttpHeaders({
'Authorization': 'basic ' + payload
});
return this.http.post<AuthUser>(`${ENV.apiUrl}/authentication`, {}, { headers: headers })
.map((succes) => {
return Observable.of({
type: SessionActions.LOGIN_SUCCESS,
payload: succes
})
});
.catch((error) => {
return Observable.of({
type: SessionActions.LOGIN_FAILED,
payload: {}
})
});
}
)).catch((error) => {
return Observable.of({
type: SessionActions.LOGIN_FAILED,
payload: {}
})
});
}
Вот изображение отмененного звонка