处理jQuery deferred.done即使请求被中止也被调用?

ron*_*mac 1 javascript jquery

我正在编写一个函数,它对Web服务进行http调用,获取一些数据并根据这些数据调用另一个函数.如果服务已关闭,则不应调用第二个函数.我认为这样做的显而易见的方法是写入,$.when(func1()).done(func2);但即使请求被中止,这也会触发func2.我意识到我可以通过在func1的$.getJSON方法的成功函数中调用func2来做一个解决方法,但是如果可能的话我想使用延迟语法.任何人都可以建议如何以与延迟对象语法一致的方式处理这个问题?

function checker() {
    console.log("in checker");
    $.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
        console.log("in success function");
    });
} 

function crosser(data) {
    console.log("in crosser");
}

$(document).ready(function(){
    $.when(checker()).done(crosser);
});
Run Code Online (Sandbox Code Playgroud)

有关实例,请参阅jsFiddle.

Aru*_*hny 7

你需要回复一个承诺 checker

function checker() {
    console.log("in checker");
    return $.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
        console.log("in success function");
    });
} 
Run Code Online (Sandbox Code Playgroud)

演示:小提琴

也没有必要使用 $.when()

$(document).ready(function(){
    checker().done(crosser);
});
Run Code Online (Sandbox Code Playgroud)

演示:小提琴