是否有一个像队列一样创建的 Redux Saga,等到第一个 redux-saga 生成器效果完成,然后从某个队列中获取下一个

Is there a Redux Saga that creates like a queue and wait until first redux-saga generator effect is finished then get next from some queue

我学习 Redux(初学者)并且阅读了 Redux Saga

这是最常见的效果 - 我看不出如何按照我想要的方式构建我的代码。

takeMaybe(channel)
takeEvery(pattern, saga, ...args)
takeEvery(channel, saga, ...args)
takeLatest(pattern, saga, ..args)
takeLatest(channel, saga, ..args)
takeLeading(pattern, saga, ..args)

我阅读了一些 other 的答案,但找不到解决方案。在我的例子中,我想让中间件 Saga 处理一些文件,例如 User select 文件,并且 Saga 必须对每个文件进行一些检查,例如创建哈希并连接 Firestore 以获取元数据。我希望这按顺序发生,所以如果用户 select 1000 个文件浏览器不会崩溃。

takeLatest 杀死了当前的 运行,这样就不会起作用,takeEvery 会在每个文件上生成一个新线程。

在我的场景中如何解决这个问题?也许我必须创建自己的队列代码

这很容易做到

fileReducer: initialState= {files:[], proccesingFile: false} 当您需要使用 file_data 将文件添加到队列调度 FILE_ADDED 操作并将数据添加到 fileReducer.files

在函数FILE_ADDED上使用takeEvery看看proccesingFile是否是true,如果是true什么都不做return。 . 如果它是错误的,那么开始你的上传过程和所有.. 一旦完成.. 触发 FILE_UPLOADED 行动..

FILE_UPLOADED 上使用 takeEvery,删除上传的文件并检查文件数组是否为空。如果它为空,只需 return 否则查看 proccesingFiletrue,如果是 true 什么都不做 return.. 如果它是假的,那么在完成后开始第一个元素的上传过程.. 再次触发 FILE_UPLOADED 操作..

This process will continue till files is empty array.. Things go asynchronously so the browser don't crumble

Note : in takeEvery FILE_UPLOADEDwe are checking if proccesingFile is truejust to make sure we are not uploading multiple files at once..

如果您觉得有什么不清楚的地方,随时准备提供帮助..