在rxjs中有条件地执行ajax调用

在rxjs中有条件地执行ajax调用,rxjs,reactivex,redux-observable,Rxjs,Reactivex,Redux Observable,我从学习如何使用RxJS开始,我已经用一个有条件的Ajax调用实现了一个epic,如下所示: export default (action$, store) => action$.ofType(GET_USERS_BY_ID) .mergeMap((action) => { const userIdList = action.userIdList; let observable; if (userIdList.length >

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

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);
        });
    });

这是正确的方法吗,还是有一些操作员简化了这一过程?

如果您只想处理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(有效载荷);doSomething2(有效载荷)不会针对空列表执行。这是真的-如果空状态很重要,则此方法不适用。如果
userIdlList.length==0,则会发出
doSomething1
doSomething2
的空响应,这看起来很奇怪@格伦戴维恩茨的回答似乎更符合我的预期,你能澄清为什么不是吗?