Async.js队列工作者没有完成

时间:2016-04-07 08:55:23

标签: javascript node.js multithreading typescript async.js

使用以下代码建立使用robocopy执行复制操作的作业队列:

interface copyProcessReturn {
    jobId: number,
    code: number,
    description: string,
    params: string[],
    source: string,
    target: string,
    jobsLeft: number
}

export default class CopyHandler {
 private aQueue: AsyncQueue<copyProcess>;

 constructor() {
    let that = this;
    this.aQueue = async.queue(function (cp: copyProcess) {
        that.performCopy(cp);
        that.copy_complete();
    }, 1);     
 }

 private copy_complete() {
     // NOP
 }  

 public addCopyProcess(cp: copyProcess): void {
    this.aQueue.push(cp);
 }

目的是一次执行一个复制过程,同时在向队列添加额外复制过程方面保持并发性。

这适用于第一个作业,其他作业排队正确。但是,即使在作业完成后正确调用了copy_complete()回调,也不会释放其worker,并且队列中的其他作业仍未处理。

我非常感谢提示。

1 个答案:

答案 0 :(得分:1)

async.queue中的函数有2个参数,第二个是你需要在that.copy_complete();之后调用的回调函数,让异步库知道它已经完成,它可以在队列中运行下一个fn。类似的东西:

this.aQueue = async.queue(function (cp, next) {
    that.performCopy(cp);
    that.copy_complete();
    next();
}, 1);