Последовательность ajax-запросов в редуксных наблюдаемых, основанная на ответе первого, и индивидуально обрабатывает ошибки и диспетчерские действия - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь упорядочить два ajax-запроса в redux-observables, и второй запрос будет основан на ответе первого, и я по отдельности хочу отправить ответ или ошибку обоих запросов.

Использование concat для обработки одного запроса за другим, но я застрял на том, как использовать ответ первого во второй запрос. Если я цепью использую два switchMap, то через селектор результатов я получу внутреннюю и внешнюю наблюдаемые, но я не получаю, как распределить действие после первого запроса.

export const deleteSettingsEpic = action$ => action$.pipe(
    ofType('DELETE_SETTINGSDATA'),
    switchMap(action$ => concat(
        ajax.ajaxDelete(`${action$.payload.api}/${action$.payload.id}`)
            .pipe(
                map(r => ({ type: 'DELETE_SUCCESS', payload: r })),
                catchError(e => of({ type: 'DELETE_ERROR' }))
            ),
        ajax.get(`${action$.payload.api}?page=${action$.payload.query.page}&limit=${action$.payload.query.limit}`)
            .pipe(
                map(r => ({
                    type: action$.payload.getPaginationAction,
                    payload: {
                        data: r.response.docs,
                        page: r.response.page,
                        totalPages: r.response.totalPages,
                        limit: r.response.limit,
                        totalDocs: r.response.totalDocs
                    }
                })),
                catchError(e => of({ type: 'FETCH_ERROR' }))
            ),
        of({ type: 'SET_DIMMER_FALSE' }).pipe(delay(250)),
        of({ type: 'RESET_ERRORS' }).pipe(delay(1500)),
    )
    ),
);

1 Ответ

0 голосов
/ 20 января 2019

Возможно, вы должны использовать concatMap для второго запроса AJAX, в псевдокоде:

export const deleteSettingsEpic = action$ => action$.pipe(
    ofType('DELETE_SETTINGSDATA'),
    switchMap(action$ => ajax.ajaxDelete(...)),
    concatMap(result => ajax.get(...))
    ),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...