我使用异步库来管理使用队列对象的Web worker中的异步请求。 但是当我运行队列对象kill命令时,它不会进入空闲状态,选择文档说:
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 :(得分: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');
});