Ich verwende die Async-Bibliothek, um meine asynchronen Anforderungen in einem Web-Worker zu verwalten, der das Warteschlangenobjekt verwendet. Aber wenn ich die Warteschlange laufen Objekte Befehl töten es geht nicht in den Ruhezustand gegenüber liegenden in der Dokumentation sagt:Async-Warteschlange wird beim Beenden nicht inaktiviert
Sieg: eine Funktion, die den Abfluss Rückruf entfernt und leert verbleibenden Aufgaben aus der Warteschlange es zwingt untätig sein. Rufen Sie mit queue.kill() auf.
Ich möchte die Warteschlange anhalten und den Web Worker beenden, wenn ein Fehler in einer Aufgabe auftritt. Aber ich habe herausgefunden, dass das Töten nicht beendet ist, wenn ich die Nachricht rufe, die meinem Arbeitermanager sagt, dass er diesen Arbeiter töten soll. Stattdessen sagt es mir unendlich, dass Leerlauf falsch ist.
Ich verwende den folgenden Code ein:
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;
}
}
};
Ist das ein Bug in async oder es ist ein Fehler von mir?