2016-11-19 5 views
0

私は非同期ライブラリを使用して、キューオブジェクトを使用するWebワーカーで非同期要求を管理します。 しかし、私は、キューがそれが言うのマニュアルをアイドル状態のoposingに入らないコマンドを殺すオブジェクトを実行します。非同期キューがkillでアイドルにならない

キル:ドレインコールバックを削除し、それを強制的にキューから残り タスクを空にする機能をアイドルになる。 queue.kill()で呼び出します。

1つのタスクでエラーが発生した場合は、キューを停止してWebワーカーを強制終了します。しかし、私は、ワーカーのマネージャーにこのワーカーを殺すよう伝えるメッセージを呼び出すと、その殺害は完了していないことがわかりました。代わりに、それは無駄にアイドルだと私に伝えます。

私は次のコードを使用し

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

使用している非同期ライブラリのバージョンを再度確認します。 errorコールバックがバージョン2.0で追加されました。

バージョン1.5を使用している場合は、タスクをキューに追加するときに渡すコールバックのエラーを処理する必要があります。適応:docs

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