что должна возвращать каждая связанная функция в режиме redux-observable?

отвечая на свой вопрос:

имеет смысл, что эпос (в конце) должен возвращать собственный поток

а как насчет связанных между собой вызовов функций? Могу ли я вернуть объекты плана, а затем вернуть поток в конце?

мне нужно вернуть сам наблюдаемый объект или объект подписки?

Например:

это идиоматический "rxjs" или наблюдаемый redux?

const epic = ($action, store) =>
    action$
        .filter(filterFunction)
        .map(action => processAction(action, store))
        .map(processResult)
        .flatMap(apiCall)
        .map(res => ({ type: 'DONE', payload: res }))


const processAction = (action, store) =>
    Observable.create(
        obs => {
            const result = // do something with store and action

            return obs.next(result)
        })

const processResult = result =>
    result.subscribe(res => {
        const newRes = // do some other stuff
        return Observable.from({ newRes })
    })

epic: принимает actionStream, фильтрует тип X, сопоставляет каждый тип с операцией diff, упаковывает и отправляет тело запроса на сервер, сообщает редуктору, что вызов сервера был успешным

processAction: принимает действия типа X, сопоставляет каждое действие с процессом, который сравнивает моментальные снимки (из хранилища) и выводит совокупный DIFF между деревьями состояний.

processResult: получает DIFF и создает тело запроса полезной нагрузки


person Anthony Chung    schedule 15.08.2017    source источник


Ответы (1)


Это не было бы идиоматическим rxjs, потому что map не должен иметь побочных эффектов; в вашем примере этим злоупотребляют довольно сильно. Я не верю, что он полностью соответствует вашим намерениям.

Я счастлив предложить несколько шаблонов, если вы хотите описать, что вы хотите сделать :)

person jayphelps    schedule 15.08.2017
comment
Я отредактировал свой вопрос, но не уверен, нужно ли мне соответственно увеличивать / уменьшать масштаб. каждое действие сигнализирует о намерении сделать снимок, поэтому общий вывод в конечном итоге должен отправить разницу на сервер как PUT, а затем уведомить редуктор об успешной синхронизации - person Anthony Chung; 15.08.2017
comment
промежуточные карты, которые я связал до того, как flatMap могут просто выводить POJO (пока flatMap получает обработанное / отформатированное тело запроса), но я думал, что flatMap ожидает наблюдаемого. - person Anthony Chung; 15.08.2017