代码之家  ›  专栏  ›  技术社区  ›  Emad Dehnavi

等待队列中的所有任务完成后,使用异步库返回值

  •  0
  • Emad Dehnavi  · 技术社区  · 8 年前

    我使用异步库并行执行一些任务,使用队列,我的问题是我更新了其中的结果 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 回复  |  直到 8 年前
        1
  •  2
  •   Emad Dehnavi    8 年前

    我找到了解决方案,如果有人需要,我需要返回:

    return q.drain()
    

    基于异步文档,drain是在队列中的最后一个项目从工作线程返回时调用的回调

        2
  •  1
  •   Engin Morse    7 年前

    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
    drain函数当队列中的最后一个项目从工作线程返回时调用的回调函数。