Как отправить действие из async.queue в реагировать на редукцию? - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно отправить действие из 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);
};

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Просто отправьте объект "dispatch" с аргументами в очереди.

  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);
0 голосов
/ 18 февраля 2019

Может быть, вы могли бы использовать redux-thunk ?Тогда вы можете отправлять действия асинхронно и делать что-то вроде

export function upload(parameters) {
   return async (dispatch, getState) => {

      dispatch(someTaskAction());

      await dispatch(uploadAction());

   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...