javascript - 通过 eventChannel 在 redux-saga 中发出限制文件加载进度
问题描述
我将redux-saga与eventChannel一起使用,以便通过进度跟踪处理资源加载。
我想知道为了消除过于频繁的负载进度事件的最佳模式是什么。我是否应该通过节流排放在较低水平上处理它
import {
eventChannel,
END
} from 'redux-saga'
import request from 'superagent';
import { throttle } from 'throttle-debounce';
function loadFile(url) {
return eventChannel(emitter => {
const emitProgress = (emitter, payload) => emitter(payload);
const emitProgressThrottled = throttle(500, emitProgress);
request.post(url)
.on('progress', event => {
const payload = {
percent: event.percent,
type: 'progress'
};
emitProgressThrottled(emitter, payload)
})
.then(res => {
const payload = {
data: res.body,
type: 'finish'
};
emitter(payload);
emitter(END);
})
})
}
还是在 redux-saga范围内处理 限制由 发出的入站模式更好eventChannel
?
任何帮助表示赞赏。谢谢。
解决方案
自从我最初发布这个问题以来已经过去了几个星期,我让我的想法更加清晰。
对于所描述的场景,我更喜欢较低级别的油门方法(上述问题正文中的代码)。隔离 API 操作范围以及避免对redux-saga中间件的额外负载对我来说似乎更合理。
正如@Martin Kadlec正确指出的那样,这两种解决方案都被认为是可以接受的。您将选择哪一个更符合软件设计模式和个人喜好。
推荐阅读
- github - github 操作 - npm 安装失败,退出代码 1
- laravel - Laravel - 注册后重定向到带有数据的路由
- github - “Fetch”的 DataPower SSL 配置导致“无法获取 SSL 配置文件”
- node.js - 如果 NodeJS 同时收到 n 个请求,它将首先服务哪个请求?
- ocaml - 为什么我对用户 def 类型的强制转换不起作用?
- java - 带有 Resttemplate 的 ByteArrayInputStream
- django - Django 3.0 教程 - mysite/URL 不起作用
- flutter - 在 VS Code 中调试 Flutter 应用程序时如何跳过外部文件?
- angular - 绑定实时数据而无需在 Angular 中重新加载页面
- flutter - Flutter:在没有导航的情况下使用 Hero