我已经使用异步库同时执行某些任务,使用队列,我的问题是我在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!
答案 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
排水功能,当工作人员返回队列中的最后一个项目时调用的回调。