首页 > 解决方案 > 通过 eventChannel 在 redux-saga 中发出限制文件加载进度

问题描述

我将redux-sagaeventChannel一起使用,以便通过进度跟踪处理资源加载。

我想知道为了消除过于频繁的负载进度事件的最佳模式是什么。我是否应该通过节流排放在较低水平上处理它

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

任何帮助表示赞赏。谢谢。

标签: javascriptreactjsreduxredux-sagathrottling

解决方案


自从我最初发布这个问题以来已经过去了几个星期,我让我的想法更加清晰。

对于所描述的场景,我更喜欢较低级别的油门方法(上述问题正文中的代码)。隔离 API 操作范围以及避免对redux-saga中间件的额外负载对我来说似乎更合理。

正如@Martin Kadlec正确指出的那样,这两种解决方案都被认为是可以接受的。您将选择哪一个更符合软件设计模式和个人喜好。


推荐阅读