【发布时间】:2017-02-19 06:37:08
【问题描述】:
我正在尝试创建一个将采取行动的史诗,然后调度两个不同的行动,第二个行动延迟两秒。经过一堆尝试,这是我能做的最好的:
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)
在我的应用程序加载后立即运行(而不是在事件从父流中下来时)。我注意到这一点是因为在我的应用程序加载后两秒钟,reducer 收到了 FETCH_SUCCESS 操作。我什至附上了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事件被调度。
【问题讨论】:
标签: javascript redux rxjs redux-thunk redux-observable