Promise 如何将.cancel()与bluebird一起使用

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

在此处记录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();
  })
  .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()