キャンセルできるブルーバードの約束があります。キャンセルされた場合、実行中のタスクを適切に中止するためにいくつかの作業を行う必要があります。タスクは 2 つの方法でキャンセルできます。promise.cancel()
またはを使用しpromise.timeout(delay)
ます。
タスクがキャンセルまたはタイムアウトになったときに適切に中止できるようにするには、CancellationErrors と TimeoutErrors をキャッチする必要があります。CancellationError のキャッチは機能しますが、何らかの理由で TimeoutError をキャッチできません。
var Promise = require('bluebird');
function task() {
return new Promise(function (resolve, reject) {
// ... a long running task ...
})
.cancellable()
.catch(Promise.CancellationError, function(error) {
// ... must neatly abort the task ...
console.log('Task cancelled', error);
})
.catch(Promise.TimeoutError, function(error) {
// ... must neatly abort the task ...
console.log('Task timed out', error);
});
}
var promise = task();
//promise.cancel(); // this works fine, CancellationError is caught
promise.timeout(1000); // PROBLEM: this TimeoutError isn't caught!
タイムアウトが設定される前にタイムアウト エラーをキャッチするにはどうすればよいですか?