Promise 如何将.cancel()与bluebird一起使用
在此处记录API 我在我的演示中尝试了它,但不起作用Promise 如何将.cancel()与bluebird一起使用,promise,bluebird,Promise,Bluebird,在此处记录API 我在我的演示中尝试了它,但不起作用 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(); }) .the
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');
});
那么如何使用这个方法呢?要使用.cancel()
,首先需要打开取消,然后调用函数.cancel()
如果您使用的bluebird低于3,那么您的代码应该如下所示:
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()
时遇到类似问题时,首先需要打开取消,然后调用函数.cancel()
如果您使用的bluebird低于3,那么您的代码应该如下所示:
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();
另外,我建议你看看这个帖子:
这对我很有帮助,当我遇到类似的问题时你认为会发生什么?您正在将cancelPromise
设置为虚拟承诺。。。然后,您将取消该虚拟承诺,然后将cancelPromise
设置为其他内容。默认情况下,取消功能已关闭,您可以使用promise.config
启用它。但是,我添加了API示例中的这段代码promise.config
,但它不起作用。您希望发生什么?您正在将cancelPromise
设置为虚拟承诺。。。然后,您将取消该虚拟承诺,然后将cancelPromise
设置为其他内容。默认情况下,取消功能已关闭,您可以使用promise.config
启用它。但这段代码来自API示例,我添加了promise.config
,但它不起作用。这意味着我不能在任何一步取消它。你可以在任何一步取消它。您需要添加:main action.cancel()
您希望取消承诺的位置这意味着我不能在任何步骤中取消它?您可以在任何步骤中执行此操作。您需要在要取消承诺的位置添加:mainAction.cancel()