использование redux-thunk с redux-observable

Я использую redux-thunk для управления асинхронными вещами в моем приложении для реагирования, и я хочу использовать redux-observable для более простого управления сложным асинхронным потоком (например, объединить несколько вызовов Ajax). Есть ли способ сделать это без изменения того, что уже сделано?

Вот пример того, что я имею в виду:

const fetchSomeData = () => {
    return (dispatch, getState) => {
        doAnAjaxCall((err, response) => {
            if (err) return dispatch({type: 'ERROR', err})
            // do something
            return dispatch({type: 'SUCCESS', response})
        })
    }
}

Можно ли использовать fetchSomeData внутри эпоса?
Поскольку redux-thunk основан на обещаниях, redux-observable должен допускать это, я что-то упустил?


person androsanta    schedule 29.01.2018    source источник
comment
Я думаю, вам еще нужно немного поработать над оформлением эпоса. Вы можете использовать обёртку существующих промисов с наблюдаемым. Но я бы предложил использовать redux-observable и удалить redux-thunk, оба хороши и имеют другой стиль обработки асинхронных действий. Мне нравится избыточно-наблюдаемый, поэтому я могу быть предвзятым.   -  person ashokd    schedule 30.01.2018


Ответы (1)


Ага! Вы вполне можете использовать их вместе. Просто поместите промежуточное ПО с резервным переходом перед промежуточным ПО, наблюдаемым с помощью redux.

applyMiddleware(thunkMiddleware, epicMiddleware)

https://stackblitz.com/edit/redux-observable-playground-8c7pd9?file=ping-pong.js

Redux применяет промежуточное программное обеспечение в том порядке, в котором они предоставляются в качестве аргументов, поэтому в этом случае мы хотим, чтобы промежуточное программное обеспечение thunk поглощало любые отправленные санки, чтобы сами функции thunk никогда не достигали наблюдаемых с помощью redux (только чистые действия). Но ваши эпики все еще могут отправлять преобразователи, поскольку промежуточное ПО, наблюдаемое с помощью избыточности, использует store.dispatch под капотом.

person jayphelps    schedule 30.01.2018
comment
Этот пример больше не работает с последней версией, наблюдаемой с редукцией. Пожалуйста, помогите обновиться с помощью epicMiddleware.run(rootEpic) @jayphelps - person MattYao; 29.07.2018