此处的文档API http://bluebirdjs.com/docs/api/cancellation.html
我在我的演示中尝试,但没有工作
var Promise = require('bluebird');
var a = require('./a');
var b = require('./b');
var cancelPromise = Promise.resolve();
cancelPromise.cancel();
cancelPromise = a.fnA()
.then(function() {
return b.fnB();
})
.then(function() {
console.log('done');
})
.finally(function() {
if (cancelPromise.isCancelled()) {
console.log('canceled');
}
console.log('end');
});
那么如何使用这种方法?
答案 0 :(得分:4)
要使用.cancel()
,首先您需要将cancellation
设置为,然后才能调用函数.cancel()
如果您使用3以下的bluebird,您的代码应该是这样的:
var mainAction = a.fnA()
.cancellable() // => cancellation turned on
.then(function() {
return b.fnB();
})
.then(function() {
console.log('done');
})
.catch(function( err ){ // => 'Reason for cancel'
console.error(err);
})
.finally(function() {
console.log('end');
});
mainAction.cancel('Reason for cancel');
如果您使用bluebird 3及更高版本,代码应如下所示:
var successfulFetch = false, mainAction = a.fnA()
.then(function() {
return b.fnB();
})
.then(function() {
console.log('done');
}).finally(function() {
if(!successfulFetch){
console.error('Reason for cancel');
}
console.log('end');
});
mainAction.cancel();
另外,我建议你看一下这篇文章:Cancel a delayed Bluebird promise
当我遇到类似的问题时,这对我真的很有帮助