首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux-observable epic调度两个动作

Redux-observable epic调度两个动作
EN

Stack Overflow用户
提问于 2017-04-29 06:35:14
回答 2查看 2.7K关注 0票数 2

我在redux-observable中有以下史诗

代码语言:javascript
复制
export const landingEpic = action$ => (
    action$.ofType('LOAD_USERS').delay(5000).map(() => ({
        type: 'USERS_LOADED',
        UserList: ['a','b','c','d']
    }))
);

到目前为止,我很好,但是我希望epic调度一个'LOADING_USERS‘操作,这样我就可以在加载用户时显示一个处理消息。史诗是做这件事的正确地方吗,如果是的话,我该怎么做。如果史诗不是这样做的地方,那么我应该在哪里做呢?

EN

回答 2

Stack Overflow用户

发布于 2017-05-02 02:10:17

我想要做的是立即发出USERS

,然后在5秒后发出USERS_LOADED

有很多方法可以做到这一点,这里有两种:

代码语言:javascript
复制
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等,取决于您的用例)来隔离我们的顶层链,这样我们就可以创建一个在不同时间产生两个动作的可观察对象。startWith也很方便,但也可以使用concat实现相同的效果:

代码语言:javascript
复制
Observable.concat(
  Observable.of({ type: 'LOADING_USERS }),
  Observable.of({
    type: 'USERS_LOADED',
    UserList: ['a','b','c','d']
  })
    .delay(5000)
)
票数 1
EN

Stack Overflow用户

发布于 2017-04-29 07:32:22

我认为你可以这样做:

代码语言:javascript
复制
const landingEpic = action$ => (
action$.ofType('LOAD_USERS').delay(5000).flatMap(() => (Observable.concat(
{
    type: 'USERS_LOADING'       
},
{
    type: 'USERS_LOADED',
    UserList: ['a','b','c','d']
}))));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43689766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档