reactjs - 如何处理 redux saga 中的请求数组

标签 reactjs react-native redux-saga

我正在尝试从我的 React Native 应用程序上传多个文件。它在yield 语句上给出Unexpected Token 错误。

是否可以在循环内执行yield

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

谢谢, 抱歉我的英语不好

最佳答案

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

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

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

  yield responses.map(response => {
    return put(Actions.fileUploaded(response))
  })
}

请注意,在这种情况下,所有调用都必须成功才能分派(dispatch)操作。即,在所有调用成功解决之前,不会调度操作(否则 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 block 包围每个单独的进程,所以任何错误都将单独处理,不会导致其他上传进程失败

关于reactjs - 如何处理 redux saga 中的请求数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41518739/

相关文章:

javascript - 错误 : exportArchive: The data couldn’t be read because it isn’t in the correct format

javascript - 当应用程序处于后台时发送鸟推送通知

javascript - 尝试读取图像文件时检测到 React-native 无效的 UTF-8

javascript - Redux Saga navigator.geolocation.getCurrentPosition

javascript - 导致此未捕获错误 : Cannot find module "./users/UserSection.jsx" message? 的错误在哪里

jquery - Owl Carousel - 类型错误 : Cannot read property 'fn' of undefined

reactjs - 类型 'RefObject<HTMLDivElement>' 的参数不可分配给类型 'IDivPosition' 的参数

ios - 当针对真实设备时,无法在 IOS 中构建 React-native

javascript - 如何在 TypeScript 中使用嵌套对象?类型 'object' 上不存在属性

reactjs - 在 React-Redux 应用程序中显示和管理错误消息的最佳实践