return EMPTY 导致我的 redux observable 链崩溃

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)

但每次我进去的时候我都有

未捕获的错误:操作必须是普通对象。使用自定义中间件进行异步操作。

但他们说如果没有调度任何操作,则使用 E​​MPTY。

我也尝试过Observable.empty(),但它说 Observable 中不存在空(从我所看到的情况来看,这种方式已被弃用)

mar*_*tin 5

问题是您正在使用运算符map并在其中返回EMPTYEMPTY是一个不发出任何next通知并且只发出一个complete通知的 Observable。但map不关心你从它的投影函数返回什么,所以它会在抱怨的EMPTY地方进一步传递它redux-observable,因为EMPTY不是一个动作。

因此,map您可以使用concatMap(或mergeMap也可以)并用 换ItemsActions.getItemsListRequestof()。回归是完全正确的EMPTYconcatMap

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)