如何处理Redux传奇中的请求数组 [英] How to handle array of requests in redux saga

查看:0
本文介绍了如何处理Redux传奇中的请求数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从我的Reaction本机应用程序上传多个文件。它在Year语句上给出Unexpected Token错误。

是否可以在循环内执行yield

files.map((fileOb)=>{
 const response=yield call(FileManager.uploadFile, fileOb)
 yield put(Actions.fileUploaded(response))
})

谢谢, 抱歉,我的英语不好

推荐答案

在上面的示例中,您在传递给files.map的回调中屈服。它不起作用,因为您只能在Generator函数内使用yield

要处理并行请求,您可以生成效果数组

function* uploadFiles(files) {
  const responses = yield files.map(fileOb => {
    return call(FileManager.uploadFile, fileOb)
  })

  yield responses.map(response => {
    return put(Actions.fileUploaded(response))
  })
}
请注意,在这种情况下,所有调用都必须成功才能分派操作。即,在成功解决所有调用之前,不会调度操作(否则,SAGA将取消剩余调用并引发错误)。

另一种方法(可能是您所期望的)是为每个单独的进程(call->PUT)提供平行的传奇。例如

function* uploadFiles(files) {
  yield files.map(file => call(uploadSingleFile, file))
}

function* uploadSingleFile(file) {
  try {
    const response = yield call(FileManager.uploadFile, file)
    yield put(Actions.fileUploaded(response))
  } catch(err) {
    yield put(Actions.fileUploadedError(response))
  }

}

在后面的示例中,一旦相应的调用返回,就会调度一个上载操作。另外,因为我们已经用Try/Catch块包围了每个单独的进程,所以任何错误都将单独处理,不会导致其他上载进程失败

这篇关于如何处理Redux传奇中的请求数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆