我正在尝试创建一个将采取行动的史诗,然后调度两个不同的行动,第二个行动延迟两秒。经过一堆尝试,这是我能做的最好的:
const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000))
不幸的是,似乎:
Observable.of({ type: 'FETCH_SUCCESS' }).delay(2000)
在我的应用程序加载后立即运行(而不是在事件从父流中下来时)。我注意到了这一点,因为FETCH_SUCCESS
在我的应用程序加载后两秒钟,reducer 就收到了这个动作。我什至附上了一个console.log
来确认这一点:
const succeedEpic = action$ =>
action$.filter(action => action.type === 'FETCH_WILL_SUCCEED')
.mapTo({ type: 'FETCH_REQUEST' })
.merge(Observable.of({ type: 'FETCH_SUCCESS' })
.do(() => console.log('this has begun'))
.delay(2000)
)
“这已经开始”在应用程序启动时记录到控制台。
我怀疑这与 Redux-Observable 如何为您自动订阅有关。
期望的行为是我将:
- 单击调度
FETCH_WILL_SUCCEED
事件的按钮。 - 立即,一个
FETCH_REQUEST
事件被分派。 - 两秒后,一个
FETCH_SUCCESS
事件被分派。