在rxjs中有条件地执行ajax调用
我从学习如何使用RxJS开始,我已经用一个有条件的Ajax调用实现了一个epic,如下所示:在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 >
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
的空响应,这看起来很奇怪@格伦戴维恩茨的回答似乎更符合我的预期,你能澄清为什么不是吗?