Cro*_*csx 6 rxjs redux redux-observable
我正在使用 redux,redux-observable。
我有以下内容
import { EMPTY, Observable } from "rxjs";
const setCurrentDatastoreIdEpic = (action$, state$): Observable<any> => action$.pipe(
ofType(DatastoreActions.setCurrentDatastoreId),
map((action: {payload: {datastoreId: string}}) => {
if(action.payload.datastoreId) {
return ItemsActions.getItemsListRequest({
datastoreId: action.payload.datastoreId,
page: 1,
});
} else {
return EMPTY;
}
})
);
Run Code Online (Sandbox Code Playgroud)
但每次我进去的时候我都有
未捕获的错误:操作必须是普通对象。使用自定义中间件进行异步操作。
但他们说如果没有调度任何操作,则使用 EMPTY。
我也尝试过Observable.empty(),但它说 Observable 中不存在空(从我所看到的情况来看,这种方式已被弃用)
问题是您正在使用运算符map并在其中返回EMPTY。EMPTY是一个不发出任何next通知并且只发出一个complete通知的 Observable。但map不关心你从它的投影函数返回什么,所以它会在抱怨的EMPTY地方进一步传递它redux-observable,因为EMPTY不是一个动作。
因此,map您可以使用concatMap(或mergeMap也可以)并用 换ItemsActions.getItemsListRequest行of()。回归是完全正确的EMPTY。concatMap
concatMap((action: {payload: {datastoreId: string}}) => {
if(action.payload.datastoreId) {
return of(ItemsActions.getItemsListRequest({
datastoreId: action.payload.datastoreId,
page: 1,
}));
} else {
return EMPTY;
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |