Redux-Observable 单个史诗中的多个动作

我对此很陌生,并且有几个类似的问题,例如redux-observable - 在单个史诗中分派多个 redux 操作,但我看不到它们如何应用于我的用例。

我正在使用 Subject 来基于处理文件和上传到服务器发出多个事件

export function UploadSceneWithFile(scene){

  const subject$ = new Subject()

  FileToScenePreview(scene,scene.file).then(res => subject$.next(res))

  const uploader = new S3Upload({
   ....
    onError:()=>subject$.next('error'),
    onProgress: (val)=> subject$.next(val),
    onFinishS3Put: ()=>subject$.next('complete'),
  })
  uploader.uploadFile(scene.file)

  return subject$
}

A 想写一个史诗来捕捉这些事件并根据返回的数据分派动作。

IE。像这样的东西

export function uploadSceneFile(action$) {
  return action$.ofType(CREATE_SCENE_SUCCESS)
    .mergeMap(({payload}) =>
      UploadSceneWithFile(payload)
        .subscribe(res => {
            console.log(res)
          if (!res.thumbName) {
            return { type: UPLOAD_SCENE_FAILED, message: 'failed' }
          } else {
            return {type: UPLOAD_SCENE_SUCCESS, payload:  res }
          }
        if (!res.value) {
            return { type: UPLOAD_SCENE_THUMB_FAILED, message: 'failed' }
          } else {
            return {type: UPLOAD_SCENE_THUMB_SUCCESS, payload:  res }
          }
        })
    )
}

我收到此错误:

类型错误:您提供了一个预期流的无效对象。您可以提供 Observable、Promise、Array 或 Iterable。

我可以控制台记录结果,但我没有调度任何操作..我有什么想法吗?

杰菲尔普斯

发生的事情是您在您的 中返回订阅mergeMap,而不是它期望的 Observable。而不是使用subscribe它看起来像你想使用map

export function uploadSceneFile(action$) {
  return action$.ofType(CREATE_SCENE_SUCCESS)
    .mergeMap(({payload}) =>
      UploadSceneWithFile(payload)
        .map(res => { // <------------------ map, not subscribe
            console.log(res)
          if (!res.thumbName) {
            return { type: UPLOAD_SCENE_FAILED, message: 'failed' }
          } else {
            return {type: UPLOAD_SCENE_SUCCESS, payload:  res }
          }
        if (!res.value) {
            return { type: UPLOAD_SCENE_THUMB_FAILED, message: 'failed' }
          } else {
            return {type: UPLOAD_SCENE_THUMB_SUCCESS, payload:  res }
          }
        })
    )
}

在 redux-observable 中,您几乎永远不会调用subscribe自己,而是编写 Observable。您使用它的唯一一次主要是与不是非常常见的自定义运算符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

redux-observable-在单个史诗中调度多个redux动作

如何使用redux-observable在一部史诗中发出多个动作?

如何在单个Redux可观察的史诗中等待/屈服于多个动作?

如何在 redux observable 史诗中为 ajax 响应发出两个动作

使用 redux-observable 和 rxjs 在史诗中出错

如何使用TypeScript键入Redux-Observable的史诗动作

Redux Observable Fetching史诗中将超时运算符放在何处

从redux-observable中调度多个动作

使用redux-observable调度多个动作

Redux可观察史诗中的IF

在Redux可观察到的史诗中的所有动作之后触发一个动作

redux-observable 调度动作

在Redux可观察的史诗中发送请求之前触发动作

从Redux可观察的史诗中访问状态

如何创建一个 redux-observable 史诗,在做任何事情之前等待 2 个动作

史诗未在Redux-Observable中返回流

为什么我的redux-observable史诗没有被触发?

可以确定史诗何时在 Redux Observable 中完成?

如何在ngrx / effect(redux-observable)中调度多个动作?

在多个Reducer Redux中响应单个Redux动作

使用Redux可观察的史诗通过多个动作来装饰数据

可观察到的Redux:为多个动作触发相同的史诗

从Redux Observable返回承诺

Redux-observable:在一些数据获取史诗完成后调用辅助函数

redux-observable史诗打字稿警告:声明了“ store”,但从未读取其值

如何在史诗 redux-observable 的 componentDidMount 方法中设置状态数据

Observable.merge在史诗中的行为有所不同

如何在可观看Redux的史诗中链接可观察到的RxJS?

如何从错误处理程序中分派动作并立即在redux-observable中断开其余Observable链?