Angular 5 / Angular-redux Epics-call был отменен после выполнения - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть установка с 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: {}
            })
        });
}

Вот изображение отмененного звонка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...