2016-04-07 86 views
0

用于使用ROBOCOPY复制操作的作业队列Async.js队列工人用下面的代码建立:没有完成

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()回调,其工作人员也不会被释放,并且队列中的其他作业仍未处理。

我会非常感谢提示。

+1

async.queue中的函数有2个参数,其次是您需要在调用that.copy_complete()之后调用的回调。让异步库知道它已完成,并且可以在队列中运行下一个fn – Molda

+0

谢谢,async.worker现在按预期完成。如果您将评论发布为答案,我会将其标记为正确。 –

+0

酷,我会做我在手机上,所以它更容易发表评论。谢谢 – Molda

回答

1

async.queue中的函数有两个参数,第二个是回调函数,您需要在that.copy_complete();后调用以使异步库知道它已完成,并且它可以在队列中运行下一个fn。例如:

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