等待所有任务在队列中完成以使用异步库返回值

时间:2018-02-14 06:49:05

标签: javascript node.js asynchronous async-await

我已经使用异步库同时执行某些任务,使用队列,我的问题是我在drain内更新结果,但是当我在函数结束时返回结果时,它仍然有初始值。我应该在队列中再次使用promise和async / await吗?这是我的代码:

result = false;
const q = async.queue((task, callback) => {
console.log('Uploading : ', task.src)
s3.upload({
  Bucket: outputBucket,
  Key: task.desc,
  Body: fs.createReadStream(task.src)
}, callback)
}, PARALLEL_TASK)

q.drain = function() {result= true;}

q.push(fileNamesReformat)

return result; // HERE It's still false!

2 个答案:

答案 0 :(得分:2)

我找到解决方案,万一有人需要,我需要回复:

return q.drain()

基于异步文档,drain是一个回调,当队列中的最后一个项从工作者返回时调用该回调

答案 1 :(得分:1)

http://caolan.github.io/async/docs.html#queue

// assign a callback
q.drain = function() {
  console.log('all items have been processed');
};

http://caolan.github.io/async/docs.html#QueueObject
排水功能,当工作人员返回队列中的最后一个项目时调用的回调。