我有一个可以取消的蓝鸟承诺。取消后,我必须做一些工作才能巧妙地中止正在运行的任务。可以通过两种方式取消任务:通过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!
如何在设置超时之前捕获超时错误?