【发布时间】:2016-11-19 16:56:27
【问题描述】:
我使用异步库来使用队列对象在 Web Worker 中管理我的异步请求。 但是当我运行 queue objects kill 命令时,它不会进入空闲状态,这与文档相反:
kill: 一个删除排水回调并清空剩余的函数 队列中的任务迫使它进入空闲状态。使用 queue.kill() 调用。
我想在一项任务出现错误时停止队列并杀死网络工作者。但是我发现,当我调用告诉我的工人经理杀死该工人的消息时,杀死还没有完成。相反,它无限地告诉我空闲是假的。
我使用以下代码:
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;
}
}
};
这是异步中的错误还是我的错误?
【问题讨论】:
标签: javascript asynchronous queue async.js