我想要做的是立即发出 USERS 加载,然后在 5 秒后发出 USERS_LOADED
有很多方法可以做到这一点,这里有两种:
export const landingEpic = action$ =>
action$.ofType('LOAD_USERS')
.mergeMap(() =>
Observable.of({
type: 'USERS_LOADED',
UserList: ['a','b','c','d']
})
.delay(5000)
.startWith({
type: 'LOADING_USERS
})
);
export const landingEpic = action$ => (
action$.ofType('LOAD_USERS')
.mergeMap(() =>
Observable.timer(5000)
.map(() => ({
type: 'USERS_LOADED',
UserList: ['a','b','c','d']
}))
.startWith({
type: 'LOADING_USERS
})
);
这里的关键是我们需要使用mergeMap
(或switchMap
,等,取决于您的用例)来隔离我们的顶级链,以便我们可以创建一个在不同时间产生两个动作的 Observable。startWith
也很方便,但也可以concat
用于相同的效果:
Observable.concat(
Observable.of({ type: 'LOADING_USERS }),
Observable.of({
type: 'USERS_LOADED',
UserList: ['a','b','c','d']
})
.delay(5000)
)