2016-11-19 22 views
0

我使用異步庫來管理使用隊列對象的web worker中的異步請求。 但是當我運行的隊列對象kill命令它不會進入空閒狀態oposing該說的文檔:異步隊列在kill時不會空閒

殺:一個功能,消除漏回調並清空從隊列迫使其剩餘 任務閒置。用queue.kill()調用。

我想在一個任務中出現錯誤時停止隊列並殺死web worker。但是我發現,當我致電告訴我的工人經理殺死這名工人的消息時,殺人並未完成。相反,它無限地告訴我空閒是錯誤的。

我使用下面的代碼:

var q = async.queue(function(task, callback) { 
    FileReader.readBlock(task.file, task.offset, task.blockSize) 
    .then(function(block) { 
     return sendBlock(task.uuid, block, task.blockNumber); 
    }) 
    .then(function(result) { 
     callback(null, result); 
    }).catch(function(error) { 
     callback(error); 
    }); 
}, 8); 

q.drain = function() { 
    console.log('All Tasks finished successfully.'); 
}; 

q.error = function(error, task) { 
    this.kill(); 

    while(true) { 
     if(this.idle()) { 
      self.postMessage({ 
       type: 'error', 
       msg: 'A task failed. Upload is killed.' 
      }); 
      break; 
     } 
    } 
}; 

的是,在異步的錯誤,還是有我的一個錯誤?

回答

0

仔細檢查您正在使用的異步庫的版本。在2.0版本中添加了error回調。

如果您使用的是版本1.5,則需要處理將任務添加到隊列時所通過的回調中的錯誤。改編自docs

q.push({name: 'foo'}, function (err) { 
    if (err) { 
     // handle error here 
     q.kill(); 
     // ... etc 
    } 
    console.log('finished processing foo'); 
});