Rxjs 获取操作必须是纯对象错误和我的redux可观察epic

Rxjs 获取操作必须是纯对象错误和我的redux可观察epic,rxjs,redux-observable,Rxjs,Redux Observable,因此,我有一个使用fromFetch的api,如下所示: 常量myApi==>{ const data$=fromFetchurl; 返回数据$; } 我的史诗是这样的: export const fetchEpic=action$:any=>{ 返回操作$.pipe of typeActions.FETCH, mergeMapaction=> myApi.pipe mapresult=>{ console.logresult 返回mapTo{type:Actions.ADD_ITEMS,pay

因此,我有一个使用fromFetch的api,如下所示:

常量myApi==>{ const data$=fromFetchurl; 返回数据$; } 我的史诗是这样的:

export const fetchEpic=action$:any=>{ 返回操作$.pipe of typeActions.FETCH, mergeMapaction=> myApi.pipe mapresult=>{ console.logresult 返回mapTo{type:Actions.ADD_ITEMS,payload:result}; }, , , ; }; console.logresult似乎工作顺利,没有问题。但是,我得到了一个错误:

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

作为旁注,我试着做了一些基本的测试,并在下面做了,它工作得很好,那么为什么上面的史诗不工作呢

export const fetchEpic=action$:any=>{ 返回操作$.pipe of typeActions.FETCH, 映射到{type:Actions.ADD_项,负载:['hello']} ; }; 使用相同错误创建了上述代码沙盒:

在地图块中,您应该直接返回操作。您的代码使用mapTo对其进行包装,mapTo是一个只应在管道方法中使用的运算符。 因此,您的目标应该是:

export const fetchEpic = (action$: any) => {
  return action$.pipe(
    ofType(Actions.FETCH),
    mergeMap(action =>
      myApi().pipe(
        map(result => {
          console.log(result)
          return{ type: Actions.ADD_ITEMS, payload: result };
        }),
      ),
    ),
  );
};
以下是更新的代码沙盒:

由于您已经在使用TypeScript,我发现如果您正确地键入epics,TypeScript编译器实际上可以找到许多这样的错误,例如

export const fetchEpic : Epic<YourActionType, YourActionType, YourStateType> = (action$) => { ..