链接jQuery承诺中止

aut*_*ton 7 javascript ajax jquery promise

我目前正在编写API代码,其中包含多个层,包含$ .ajax()调用.

一个要求是用户必须能够取消任何请求(例如,如果它花费的时间太长).

通常这可以通过简单的方式实现,例如:

var jqXHR = $.ajax(..);
$(mycancelitem).click(function () {
     jqXHR.abort();
});
Run Code Online (Sandbox Code Playgroud)

但是我的代码看起来更像是这样的:

function myapicall() {

    var jqxhr = $.ajax(…);
    var prms = def.then(function (result) {
        // modify the result here
        return result + 5;
    });

    return prms;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是有人调用myapicall()只获取jQuery.Promise而无法中止它.虽然上面的示例非常简单,但在我的实际代码中,在许多地方有几层链接.

这个问题有方法解决吗?

小智 3

您可以返回一个同时具有 jqXHR 和 Promise 的对象

function myapicall() {

    var jqXHR = $.ajax(..);
    var promise = jqXHR.then(function (result) {
        // modify the result here
        return result + 5;
    });

    return {jqXHR:jqXHR,promise:promise};
}
Run Code Online (Sandbox Code Playgroud)

  • 理想情况下是的,这就是我要做的。然而,正如我在原来的问题中提到的,不幸的是,这些调用跨越了几个层、不同的文件等,所以我必须更新每个调用链才能开始返回这个对象,而不仅仅是一个承诺,这实际上是不可行的 (2认同)