私は、jquery 遅延オブジェクトよりも優れた約束オブジェクトに bluebird.js を使用しています。私ができるようにしたいのは、2 つのリクエストを並行して実行し、両方が終了したらコードを実行することです。しかし、キャンセルできるようにするには、これらの両方のリクエストが必要です。以下は、私の問題を強調するコードの例です。これを実行して、結合されたプロミスでキャンセル関数を呼び出すと、結合ではあるが 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();