2016-04-07 119 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);