gpt4 book ai didi

javascript - bluebird:取消 promise.join 不会取消 child

转载 作者:行者123 更新时间:2023-11-30 05:35:18 25 4
gpt4 key购买 nike

我使用 bluebird.js 来获得比 jquery 延迟对象更好的 promise 对象。我想要做的是并行运行两个请求,当它们都完成后运行一些代码。但是我需要这两个请求才能被取消。下面是一些突出显示我的问题的示例代码。当我运行它并在连接的 promise 上调用取消函数时,我确实捕获了连接上的取消异常,但不是在 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();
});

关于javascript - bluebird:取消 promise.join 不会取消 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com