通过eventChannel在redux-saga中发出节流的文件加载进度

时间:2018-12-17 22:12:07

标签: javascript reactjs redux redux-saga throttling

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

我想知道什么是最好的模式,以便消除过于频繁的负载进度事件。我是否应该以throttled排放量较低的水平处理该问题

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 范围 throttling中处理eventChannel发出的入站模式更好?

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

1 个答案:

答案 0 :(得分:0)

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

对于所描述的场景,我更喜欢使用较低级别的油门方法(上述问题正文中的代码)。对我来说,隔离API操作范围以及避免给redux-saga中间件增加负担。

正如@Martin Kadlec正确指出的那样,两种解决方案均被视为可以接受。您会选择哪一种与软件设计模式和个人偏好联系在一起。