У меня есть обещание синей птицы, которое можно отменить. При отмене мне нужно проделать некоторую работу, чтобы аккуратно прервать текущую задачу. Задачу можно отменить двумя способами: через 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!
Как отловить ошибки тайм-аута до его установки?