【问题标题】:Conditional executing an ajax call in rxjs有条件地在 rxjs 中执行 ajax 调用
【发布时间】:2018-07-25 15:24:25
【问题描述】:

我从学习如何使用 RxJS 开始,我已经实现了一个带有条件 Ajax 调用的史诗,如下所示:

export default (action$, store) =>
  action$.ofType(GET_USERS_BY_ID)
    .mergeMap((action) => {
      const userIdList = action.userIdList;

      let observable;
      if (userIdList.length > 0) {
        observable = ajax.get('api/user', { userIdList });
      } else {
        observable = Observable.of({
          response: {}
        });
      }

      return observable
        .mergeMap((payload) => {
          doSomething1(payload);
          doSomething2(payload);
        });
    });

这是正确的方法吗,还是有一些运算符可以简化它?

【问题讨论】:

  • 如果userIdlList.length == 0 看起来很奇怪,这将发出doSomething1doSomething2 的空响应。 @glendaviesnz 的回答似乎更符合我的预期,你能澄清为什么不是吗?

标签: rxjs reactivex redux-observable


【解决方案1】:

如果您只想处理 userIdList 中包含项目的操作,那么您可以在进行 ajax 调用之前对其进行过滤,例如。

export default (action$, store) =>
 action$.ofType(GET_USERS_BY_ID)
.filter(action => userIdList.length > 0)
.mergeMap((action) => {
  const userIdList = action.userIdList;

  return ajax.get('api/user', { userIdList })
    .mergeMap((payload) => {
      doSomething1(payload);
      doSomething2(payload);
    });
});

【讨论】:

  • 但是函数doSomething1(payload); doSomething2(payload);不会为空列表执行。
  • 确实如此 - 如果空状态很重要,那么这种方法不适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 2017-03-09
  • 2018-12-25
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多