Javascript 取消推迟的蓝知更鸟承诺

Javascript 取消推迟的蓝知更鸟承诺,javascript,promise,bluebird,Javascript,Promise,Bluebird,如何拒绝延迟承诺: const removeDelay = Promise.delay(5000).then(() => { removeSomething(); }); //Undo event - if it is invoked before 5000 ms, then undo deleting removeDelay.reject(); // reject is not a method 蓝鸟v3 我们不再需要将承诺声明为“可撤销”(): 取消操作无需设置代码 只要按

如何拒绝延迟承诺:

const removeDelay = Promise.delay(5000).then(() => {
    removeSomething();
});

//Undo event - if it is invoked before 5000 ms, then undo deleting
removeDelay.reject(); // reject is not a method

蓝鸟v3

我们不再需要将承诺声明为“可撤销”():

取消操作无需设置代码

只要按承诺调用
cancel

const promise = new Promise(function (_, _, onCancel) {
    onCancel(function () {
        console.log("Promise cancelled");
    });
});

promise.cancel(); //=> "Promise cancelled"
您可能已经注意到,
cancel
方法不再接受取消原因作为参数。取消所需的逻辑可以在给定给
onCancel
的函数中声明,该函数是给定给承诺构造函数执行器的第三个参数。或者在
finally
回调中,因为取消承诺时也不视为错误

修订示例:

const removeDelay = Promise
    .delay(5000)
    .then(() => removeSomething());

removeDelay.cancel();
______

前蓝鸟v3

请参阅以下文档:

默认情况下,承诺不可取消。可以使用
.cancelable()
将承诺标记为可取消。如果无法解决可撤销的承诺,则可以取消该承诺。取消承诺会传播到仍挂起的目标承诺的最远可取消祖先,并在给定原因或默认情况下拒绝该承诺

我们可以这样使用它:

const removeDelay = Promise
    .delay(5000)
    .cancellable() // Declare this Promise as 'cancellable'
    .then(() => removeSomething());
    .catch(err => console.log(err)); // => 'Reason for cancel'

removeDelay.cancel('Reason for cancel');

此答案已过时-请参阅文档