javascript-蓝鸟承诺取消
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-蓝鸟承诺取消,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1254字,纯文字阅读大概需要2分钟。
内容图文
![javascript-蓝鸟承诺取消](/upload/InfoBanner/zyjiaocheng/661/b1647338598644948304d62522ae5f57.jpg)
假设我有以下Promise链:
var parentPromise = Promise.resolve()
.then(function () {
var condition = false;
if (condition) {
return parentPromise.cancel('valid reason');
} else {
return Promise.resolve()
.then(function () {
var someOtherCondition = true;
if (someOtherCondition) {
console.log('inner cancellation');
return parentPromise.cancel('invalid reason');
}
});
}
})
.catch(Promise.CancellationError, function (err) {
console.log('throwing');
if (err.message !== 'valid reason') {
throw err;
}
})
.cancellable();
以上内容永远不会进入陷阱.
如果我们将条件交换为true,则内部取消永远不会发生,但是捕获仍不会触发.
最后删除.cancellable,并用显式抛出new Promise.CancellationError()替换parentPromise.cancel()的所有实例来“解决”该问题.我不明白为什么?
为什么原始方法不起作用?
我正在使用bluebird 2.3.11.
解决方法:
cancellable()创建可取消的Promise,并且在无缘无故地调用cancel函数时,默认情况下只有它们会抛出CancellationError.
就您而言,仅在附加了catch处理程序后,您才能取消承诺.但是诺言还不能取消.因此,取消函数调用不会引发Promise.CancellationError.
您需要像这样更改代码的结构
then(function(..) {
...
})
.cancellable()
.catch(Promise.CancellationError, function (err) {
...
});
注意:我建议使用其漂亮的Promise构造函数来保证.它类似于ECMA Script 6规范.
new Promise(function(resolve, reject) {
...
});
内容总结
以上是互联网集市为您收集整理的javascript-蓝鸟承诺取消全部内容,希望文章能够帮你解决javascript-蓝鸟承诺取消所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。