Я знаком с React и Redux, но новичок в RxJS и redux-observable.
Я работаю над потоком, который мне удалось решить с помощью чего-то вроде этого:
const reducer = (state, action) => {
switch(action.type) {
// some other cases here
case Types.LOCATION_GEOCODED:
const { address, place_id } = action
return {...state, address, place_id }
}
}
const updateLocationEpic = (action$, store) =>
action$.ofType(Types.UPDATE_LOCATION)
.mergeMap((action) =>
Observable.fromPromise(reverseGeocode(store.getState().location))
.map(({address, place_id}) => ({type: Types.LOCATION_GEOCODED, address, place_id}))
)
const broadcastLocationEpic = (action$, store) =>
action$.ofType(Types.LOCATION_GEOCODED)
.map((action) => ({type: Types.NEW_CURRENT_LOCATION, store.getState().location}))
Первый эпик выдает действие LOCATION_GEOCODED после асинхронного запроса, редуктор затем «завершает» информацию о местоположении, и, наконец, второй эпик берет полное местоположение из состояния и транслирует его.
Ключевым моментом является обеспечение того, чтобы действие NEW_CURRENT_LOCATION запускалось после, когда редуктор обработал предыдущее действие (LOCATION_GEOCODED), потому что ему нужно запросить состояние, которое только что было обновлено.
Приведенный выше код работает, но мне интересно, можно ли это каким-то образом выразить в одном эпосе, особенно потому, что у меня есть другой случай, в котором мне нужно дождаться двух действий, выполняемых параллельными запросами, поэтому мне нужно будет сделать что-то похожее на то, что вы бы достигли с помощью Promise.all
вида шаблона
Есть ли лучший способ выполнить это в отдельном эпосе?
map
называет опечатку только в вашем вопросе? например один из нихmap(({address, place_id}) => {type: Types.LOCATION_GEOCODED, address, place_id})
- это возвращаемый объект с ошибкой синтаксического анализа, который необходимо заключить в круглые скобки. Это также почти наверняка опечатка:{type: Types.NEW_CURRENT_LOCATION, store.getState().location}
это не ошибка синтаксического анализа, а фактически создает блок с помеченным оператором, за которым следует посторонний вызов для получения этого состояния без возвращаемого значения. Совершенно не то, что вы хотели :) - person jayphelps   schedule 14.06.2017