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');
此答案已过时-请参阅文档