1

Web サービスへの http 呼び出しを行い、データを取得し、このデータに基づいて別の関数を呼び出す関数を作成しています。サービスがダウンしている場合は、2 番目の関数を呼び出すべきではありません。これを行うための明白な方法は書くことだと思いました$.when(func1()).done(func2);が、これはリクエストが中止された場合でも func2 をトリガーします。func1 のメソッドの success 関数内で func2 を呼び出すことで回避できることはわかってい$.getJSONますが、可能であれば遅延構文を使用したいと考えています。遅延オブジェクト構文と一致する方法でこれを処理する方法を提案できる人はいますか?

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);
});

実際の例については、 jsFiddleを参照してください。

4

2 に答える 2

7

からの約束を返す必要がありますchecker

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

デモ:フィドル

また、使用する必要はありません$.when()

$(document).ready(function(){
    checker().done(crosser);
});

デモ:フィドル

于 2013-09-11T12:55:18.753 に答える
0

のような非同期イベントの場合、実際の遅延オブジェクト$.getJSONを使用する必要があります。このオブジェクトを使用して jsfiddle を更新しました: http://jsfiddle.net/wM7aP/1/

コード:

function checker() {
    var dfd = new jQuery.Deferred();
    console.log("in checker");
    $.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
        //handle data here
        dfd.resolve( "hurray" );
    });
    return dfd.promise();
} 

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

$(document).ready(function(){
    $.when(checker()).done(crosser);
});
于 2013-09-11T13:00:15.820 に答える