首页 > 解决方案 > 如何在 react redux 中从 async.queue 调度操作?

问题描述

当某个上传音频的任务开始时,我需要从 async.queue 调度操作。异步队列用于同时上传文件。无法从以下代码中的 req.on 函数分派。

let q = async.queue(function (task, callback) {
  uploadFileOnS3(audioName, task).then(function (audioS3) {
    console.log("s3 value is", audioS3);
    let params = { Key: audioName, Body: task.file, ACL: 'public-read' };
    let req = audioS3.upload(params);

    req.on('httpUploadProgress', function (evt) {
      let percentage = (evt.loaded / evt.total) * 100;
      console.log("percentage value is", percentage);
      dispatch({type: t.PERCENTAGE, payload : percentage})
    });
  });
}, 1);


export const audioUpload = audioObj => async dispatch => {
  q.push(audioObj);
};

标签: reactjsredux

解决方案


只需在队列中发送带有参数的“调度”对象。

  q.push({ audioName, audioObj, dispatch },()=>{
})

在队列里面你可以做这样的事情

let q = async.queue(async function (task, callback) {
  uploadFileOnS3(audioName, task).then(function (audioS3) {
    console.log("s3 value is", audioS3);
    let params = { Key: audioName, Body: task.file, ACL: 'public-read' };
    let req = audioS3.upload(params);

    req.on('httpUploadProgress', function (evt) {
      let percentage = (evt.loaded / evt.total) * 100;
      console.log("percentage value is", percentage);
      task.dispatch({type: t.PERCENTAGE, payload : percentage}) //here
    });
  });
}, 1);

推荐阅读