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

2024-02-05

我正在尝试从我的反应本机应用程序上传多个文件。它正在给予Unexpected Tokenyield 语句错误。

是否可以做yield在循环内?

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

谢谢, 对不起,我的英语不好


在上面的示例中,您在传递给的回调中产生了files.map。它不起作用,因为你可以使用yield仅在 Generator 函数内。

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

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 块包围每个单独的进程,所以任何错误都将单独处理,不会导致其他上传进程失败

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 redux saga 中的请求数组 的相关文章

随机推荐

  • 如何在 Python 中将 CIDR 前缀转换为点分四组网络掩码?

    如何在 Python 中将 CIDR 前缀转换为点分四组网络掩码 例如 如果前缀是12我需要返回255 240 0 0 这是一个较轻松的解决方案 没有模块依赖项 netmask join str 0xffffffff lt lt 32 le
  • 如何将指针设置到第零位置?

    据我所知 在预处理阶段 代码中所有出现的 NULL 都会被 0 替换 然后在编译期间 指针上下文中出现的所有 0 都将替换为在该机器上表示 NULL 的适当值 因此 编译器必须知道该特定机器的 NULL 值 现在 这意味着每当我在指针上下文
  • R 中的合并命令

    我一直在使用 R 中的合并命令 并试图找出如何使用 SUFFIX 参数 在线文档并没有很好地解释它 我想做的是导入一些 csv 文件 data1 lt read csv fileA header T data2 lt read csv fi
  • 我想一次滚动多个回收器视图如何实现

    我想滚动多个RecyclerView一次如何实现该 Exp 我有 3RecyclerView水平方向 当我第一次滚动时RecyclerView那么第二个和第三个也应该滚动怎么办 答案很简单 你必须从一个回收视图获取滚动反馈并将其传递给其他回
  • python中的return和break有什么区别?

    python中的return和break有什么区别 请解释一下它们在循环和函数中到底做了什么 谢谢 break用于提前结束循环 whilereturn是用于将返回值传递回函数调用者的关键字 如果不带参数使用它 它只会结束函数并返回到之前执行
  • Angular 6:从后端服务器获取文件对象后下载文件

    我有一个结构为 type Buffer data Array 702549 的文件对象类型 我需要在 Angular 6 中做什么才能在浏览器中下载此文件 我从这个函数得到我的回应 getMarketingProposalById id s
  • 查找数组中出现次数最多的第 N 个数字

    Find the nth most frequent number in array There is no limit on the range of the numbers 我想我们可以 i 使用 C 中的映射存储每个元素的出现情况 i
  • 从 Facelets 调用 servlet 的正确方法?

    使用带有提交按钮的表单从 Facelets 文件调用 servlet 的正确方法是什么 是否需要特定表格 只需使用纯 HTML
  • 我想使用 jquery 操作 iframe 内的 html

    我想我可以通过将 jQuery 函数的上下文设置为 iframe 的文档来做到这一点 如下所示 function document ready some selector frames nameOfMyIframe document doS
  • 如何将字符串转换为长整型而不丢失前导零[重复]

    这个问题在这里已经有答案了 在我的网络服务方法中 我有一个输入类型Long 我应该在左边添加两个零 所以我将其转换为String 我连接了两个零 然后我应该再次转换为Long 我发现java中的Long类型忽略左零 如何在 Long 值中保
  • Android MLKit - 执行 Firebase ML 任务时发生内部错误

    您好 我有一个在 Android 应用程序中使用的自定义模型 但是当我尝试运行它时 会引发 MLkit 异常 所述错误的日志输出如下 Internal error has occurred when executing Firebase M
  • 什么是 SAPI?什么时候会使用它?

    我最近一直在学习 PHP 中的错误处理 并遇到了error log 功能 http docs php net manual en function error log php 在 PHP 手册中 它讨论了所有错误日志类型 我理解所有这些类型
  • 如何异步使用DataAdapter.Fill()?

    我有一个 DataAdapter 正在填充数据集中的 5 个数据表 SqlDataAdapter da new SqlDataAdapter Select from testTable con da Fill ds 0 numberOfRo
  • 如何在嵌入式 Linux Raspberry Pi 上安装 GCC 和/或 apt

    我在树莓派 用于比特币矿工 上有一个预配置的 Linux 发行版 问题是这个发行版非常小 只有 busybox 用于基本命令 它没有包管理器 甚至没有 gcc 编译器 所以我的目标是在上面安装一个 gcc 编译器 这样我就可以进一步安装其他
  • Swagger 是什么?它与 OData 相关吗?

    我熟悉 Microsoft 堆栈 我正在使用 OData 来提供一些宁静的服务 最近 我遇到了 Swagger API 文档 我试图了解它与 OData 的关系 两者看起来都是RESTful规范 哪一种被广泛使用 Swagger是一个规范记
  • strip 函数删除哪些特定字符?

    您可以在以下位置找到以下内容 str strip文档 https docs python org 3 library stdtypes html str strip The charsargument 是一个字符串 指定要删除的字符集 如果
  • 使用 Python 正则表达式匹配尾部斜杠

    我尝试像这样匹配尾随 type re match u https x x x
  • Android:ViewFlipper 和多个图像?

    嘿 我检查了大量的教程和指南 但不知何故找不到它 我需要在我的 Android 应用程序中包含多个图像 它就像一个图像查看器 幻灯片 目前 我只需使用 ImageView 和适配器 使用左 右手势在 drawable mdpi 目录中的图片
  • 如何从 Delphi 访问 Cassandra 分布式数据库

    我正在研究 Cassandra 是否可以作为我们服务器软件的分布式数据库存储的选择 服务器软件是用 Delphi 编写的 但我很难找到如何从 Delphi 访问 Cassandra 数据库的描述 一个建议SO的其他地方 https stac
  • 如何处理 redux saga 中的请求数组

    我正在尝试从我的反应本机应用程序上传多个文件 它正在给予Unexpected Tokenyield 语句错误 是否可以做yield在循环内 files map fileOb gt const response yield call File