Redux-saga takeLatest 有条件地

2024-04-21

我有一个与 redux-saga 相关的问题,有没有办法实现 takeLatest 但有条件。

例如,我有一个歌曲类型的动态列表(Rap、Pop、Hip_hop...),我想按歌曲类型获取歌曲。我定义了一个类型为“FETCH_SONGS_BY_TYPE”的 redux-action,然后将 SongType 传递给它。动作看起来像

// actions
const fetchSongsByType = songType => ({
  type: FETCH_SONGS_BY_TYPE,
  songType
});
--------------------------------------------------
//saga
function* fetchSongsByTypeSaga(action) {
   // request songs list by action.songType
}
function* Saga() {
  yield takeLatest(FETCH_SONGS_BY_TYPE, fetchSongsByTypeSaga);
}

所以我希望仅当下一个 saga 运行具有相同的 SongType 时才取消前一个 saga 任务。

在上面的代码中,我得到了这个:

  1. fetchSongs - 歌曲类型:Hip_hop(因[2]而取消)
  2. fetchSongs - 歌曲类型:Rap(因 [3] 而取消)
  3. fetchSongs - 歌曲类型:流行音乐(由于[4]而取消)
  4. fetchSongs - 歌曲类型:Rap(因 [5] 而取消)
  5. fetchSongs - 歌曲类型:流行

但我预计它会是这样的:

  1. fetchSongs - 歌曲类型:Hip_hop
  2. fetchSongs - 歌曲类型:Rap(由于[4]而取消)
  3. fetchSongs - 歌曲类型:流行音乐(由于[5]而取消)
  4. fetchSongs - 歌曲类型:Rap
  5. fetchSongs - 歌曲类型:Pop

我感谢任何帮助,提前致谢。


如果你看一下文档采取最新 https://redux-saga.js.org/docs/api/#takelatestpattern-saga-args,您将看到如何使用低级效果构建此效果。通过此示例,您可以轻松创建自定义效果,该效果仅取消同一音乐流派的操作。

takeLatestByType:

const takeLatestByType = (patternOrChannel, saga, ...args) => fork(function*() {
  // hold a reference to each forked saga identified by the type property
  let lastTasks = {};

  while (true) {
    const action = yield take(patternOrChannel);

    // if there is a forked saga running with the same type, cancel it.
    if (lastTasks[action.type]) {
      yield cancel(lastTasks[action.type]);
    }

    lastTasks[action.type] = yield fork(saga, ...args.concat(action));
  }
});

Usage:

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

Redux-saga takeLatest 有条件地 的相关文章

随机推荐

  • livereload 不提供地址选择

    更新node js后 我发现了这个问题 当我运行 ionic cordova run android livereload 时 它在本地主机中运行 我该如何解决这个问题 请帮我 离子信息 Ionic CLI 5 2 1 Ionic Fram
  • 如何有条件地实例化不同的子类?

    例如 在main函数中 我想获取用户的输入 根据输入 我将创建一个Rectangle or a Circle 它们是子类Object 如果没有输入 或未知 那么我将只创建一个通用对象 class Object public Object v
  • Eclipse 指标插件建议[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个工具来为我提供一些代码指标 LOC 总数 LOC 类 外部引用 类的数量等 有谁知道一个
  • 哪个 XML 解析器可以处理不完整的 XML 文件?

    我正在尝试使用 SAX 解析器解析 XML 但不断出现XML document structures must start and end within the same entity 这是预料之中的 因为我从其他来源获得的 XML 文档不
  • 尝试上传到 aws s3 存储桶时收到 400 错误请求

    我在服务器上签署 URL 并将其发送回客户端 效果很好 这就是该函数的样子 const aws require aws sdk config require config crypto require crypto module expor
  • 安卓。谷歌 API 翻译

    我在集成 Google API Translate 时遇到一些问题 添加到 gradle 配置此依赖项 compile com google apis google api services translate v2 rev41 1 20
  • 使用 Google Oauth2 客户端访问 API 时 Rails 3.2.3 中出现 SSL 错误

    我对 OAuth2 相当陌生 我正在尝试使用 Omniauth 和 Google API 客户端通过 Google API 访问用户的 Blogger 帐户 我正在使用以下内容 轨道3 2 3 红宝石 1 9 3 oauth2 0 8 0
  • 更有效的循环方式?

    我有来自一个更大脚本的一小段代码 我发现当函数t area被调用时 它负责大部分运行时间 我自己测试了这个函数 它并不慢 我相信它需要运行很多次 所以需要花费很多时间 这是调用该函数的代码 tri area np zeros numx nu
  • 当存在变量空间分隔列时,在 python (numpy) 中加载数据集

    我有一个包含数字数据的大数据集 并且在其某些行中存在分隔列的可变空间 例如 4 5 6 7 8 9 2 3 4 当我使用这条线时 dataset numpy loadtxt dataset txt delimiter 我收到此错误 Valu
  • Foreach - 并行对象

    最近我们开始编写需要很长时间才能完成的脚本 因此我们深入研究了 PowerShell 工作流程 阅读一些文档后 我了解了基础知识 但是 我似乎找不到一种方法来创建 PSCustomObject 对于一个内的每个单独的项目foreach pa
  • 如何在 R 中迭代生成组合? [复制]

    这个问题在这里已经有答案了 所以我目前正在使用以下代码来生成我的组合 组合 x y 但问题是函数存储了所有可能的组合 我不想存储它们 我只想通过循环或其他方式生成它们 这对我的程序来说会更有效率 有没有办法通过 for 循环生成组合而不是全
  • 如何从另一个目录运行 Maven(无需 cd 到项目目录)?

    假设我的maven项目位于 some location project我当前的位置是 another location 如何在不更改项目位置的情况下运行 Maven 构建cd some location project 您可以使用参数 f
  • 模拟迭代行为

    我有一个具有迭代行为的界面 但在 Rhinomocks 中模拟它时遇到了麻烦 示例接口和类是我的问题的一个非常简单的版本 每次调用 LineReader Read 时 LineReader CurrentLine 都应返回不同的值 下一行
  • 如何使用 API 路由在 Next.js 上下载文件

    我正在使用 next js 我有一个第三方服务 我需要从中检索 PDF 文件 该服务需要一个 API 密钥 我不想在客户端公开该密钥 这是我的文件 api getPDFFile js const options method GET enc
  • 使用 sqlite json_each 过滤 json 数组中的多个项目

    我有一个包含以下架构和数据的 sqlite 表 CREATE TABLE Feeds id INTEGER PRIMARY KEY AUTOINCREMENT groups JSON NOT NULL DEFAULT INSERT INTO
  • 哪种快速方法可以并行化 2D NumPy 数组的元素乘法?

    我使用 NumPy 函数einsum https docs scipy org doc numpy reference generated numpy einsum html执行两个 2D NumPy 数组的逐元素乘法和求和 np eins
  • 自动 PayPal 付款

    我正在寻找一种方法来自动将钱从我的 PayPal 帐户发送到其他 PayPal 帐户 通过 PHP 这可能吗 就像是 recievers array email protected cdn cgi l email protection em
  • 使用 bootstrap-modal 作为 Backbone.js 视图

    我正在尝试创建一个基于 Twitter 引导模式的 Backbone js 视图 该视图通过以下方式使用 Backbone 的自动事件委托 events视图的属性 不幸的是 bootstrap modal 似乎破坏了 Backbone 的事
  • 帮助查找内存泄漏(一般提示)

    这是在 iOS 上 设备是 iPad 发生的情况如下 我在设备上运行应用程序或使用 Xcode 进行调试和运行 5 分钟后 我收到 1 级内存警告 一分钟后 我收到 2 级内存警告 又过了一分钟 Program received signa
  • Redux-saga takeLatest 有条件地

    我有一个与 redux saga 相关的问题 有没有办法实现 takeLatest 但有条件 例如 我有一个歌曲类型的动态列表 Rap Pop Hip hop 我想按歌曲类型获取歌曲 我定义了一个类型为 FETCH SONGS BY TYP