此处记录 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');
});
Run Code Online (Sandbox Code Playgroud)
那么如何使用这个方法呢?
使用时.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');
Run Code Online (Sandbox Code Playgroud)
如果您使用 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();
Run Code Online (Sandbox Code Playgroud)
另外我建议您看看这篇文章:取消延迟的蓝鸟承诺
当我遇到类似问题时,这对我真的很有帮助
归档时间: |
|
查看次数: |
6625 次 |
最近记录: |