蓝鸟:取消承诺.加入不会取消孩子
bluebird: Cancel on promise.join doesn't cancel children
我使用bluebird.js比jquery延迟对象更好的承诺对象。我想要能够做的是并行运行两个请求,当他们都完成,然后运行一些代码。但我需要这两个请求都能被取消。下面是一些示例代码,突出了我的问题。当我运行这个并在加入的承诺上调用取消函数时,我确实击中了join上的取消异常的catch,但不是firstPromise或secondPromise,因此ajax请求不会被中止。有人知道怎么做吗?
var firstAjax = someAjaxRequest();
var firstPromise = Promise.resolve(firstAjax)
.cancellable()
.catch(promise.CancellationError, function (e) {
console.log("cancelled request");
firstAjax.abort();
throw e;
})
.catch(function (e) {
console.log("caught " + e);
});
var secondAjax = someAjaxRequest();
var secondPromise = Promise.resolve(secondAjax)
.cancellable()
.catch(Promise.CancellationError, function (e) {
secondAjax.abort();
throw e;
})
.catch(function (e) {
console.log("caught " + e);
});
var joinedPromise = Promise.join(firstPromise, secondPromise)
.cancellable()
.catch(Promise.CancellationError, function(e){
firstPromise.cancel();
secondPromise.cancel();
});
joinedPromise.cancel();
这里工作正常http://jsfiddle.net/JHuJ3/
window.CancellationError = Promise.CancellationError;
var cancellableAjax = function() {
var ret = $.ajax.apply($, arguments);
return Promise.resolve(ret).cancellable().catch(CancellationError, function(e) {
console.log("cancelled");
ret.abort();
throw e;
});
};
var firstPromise = cancellableAjax();
var secondPromise = cancellableAjax();
var joinedPromise = Promise.join(firstPromise, secondPromise).cancellable().catch(CancellationError, function(e) {
firstPromise.cancel();
secondPromise.cancel();
});
Promise.delay(500).then(function() {
joinedPromise.cancel();
});
相关文章:
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- jquery点击函数select&取消选择
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- 使用Jquery选择或取消选择ListView中的所有复选框
- 使用jquery选中/取消选中单个复选框
- 使用javascript取消隐藏和隐藏表单中的某些元素
- 如何销毁/删除/取消绑定SnapSVG.js
- 滚动然后捕捉到顶部而不是取消捕捉
- 在ReactJS中重新渲染孩子3次可以接受吗
- 取消绑定主干视图事件
- 如何取消object.prototypes javascript的一个函数
- 使用javascript在页面加载时取消选中所有复选框
- 阻止浏览器对keydown事件作出反应,但不取消该事件
- jquery选中并取消选中所有操作
- IE11中的第二个调用取消了第一个Fetch API调用
- 如何知道使用socket.io订阅/取消订阅频道
- 如何在单击“提交”按钮时为“新建”窗口编写JavaScript,用“确定”和“取消”显示注册信息
- 当鼠标按下孩子时取消单击父级
- jQuery帮助取消勾选父,我需要切换孩子复选框
- 蓝鸟:取消承诺.加入不会取消孩子