【发布时间】:2018-07-23 05:37:31
【问题描述】:
我在一个 React 和 Redux 项目中使用 Redux-Observable Epic。我有多个动作需要发出,原来这是我一直在做的,
1) 抓住史诗中的 START_ACTION
2) 获取远程数据
3) 返回一个新的 Observanble
例如:
import fetch from 'isomorphic-fetch';
import {Observable} from 'rxjs/Observable';
import {switchMap} from 'rxjs/operator/switchMap';
import {mergeMap} from 'rxjs/operator/mergeMap';
const fetchAsync = (arg) => {
// return an observable of promise
return Observable::from(fetch(url + arg));
}
export function myEpic = (action$) => {
action$.ofType(START_ACTION)
::switchMap(action => {
return fetchAsync('/action.payload')
::mergeMap(result => {
return Observable::of({type: ACTION_COMPLETE, payload: result})
})
})
};
现在,如果我需要在 START_ACTION 之后和 ACTION_COMPLETE 之前发出另一个动作 SECOND_ACTION 怎么办?换句话说,在不确保SECOND_ACTION 命中减速器的情况下,不应该发出ACTION_COMPLETE。
我可以编写另一个单独的 Epic 函数来执行此操作,但还有其他更简单的方法吗?
【问题讨论】:
-
ACTION_COMPLETE操作在等待SECOND_ACTION时应该发生什么?如果它永远不会来怎么办? -
或者你的意思是你想让这个史诗发射
SECOND_ACTION,然后紧跟ACTION_COMPLETE?即发出两个动作 -
我想发出
FIRST_ACTION,然后紧跟SECOND_ACTION。我正在考虑在返回FIRST_ACTION的动作函数中使用dispatch(SECOND_ACTION) -
FIRST_ACTION来自哪里?这不在你上面的问题中。你是说ACTION_COMPLETE吗?
标签: javascript react-redux rxjs5 redux-observable