7

私のスクリプトでは、エンコードされた値を名前に変換するために辞書を取得する必要があります。

$.ajax({
    // retrieve dictionary
})
.done(function(dictionary){
    // convert encoded values into names
})
.done(function(){
    // run my application
});

ただし、辞書が別のアプリケーションによって既に読み込まれている場合があり、この場合は ajax 呼び出しは必要ありません。

if (dictionary) {
    // convert encoded values into names
    // run my application
}
else {
$.ajax({
    // retrieve dictionary
})
.done(function(dictionary){
    // convert encoded values into names
})
.done(function(){
    // run my application
});
}

この if/else ステートメントはかなり重いですが、短くする方法はありますか?

// load dictionary if needed
// then run my application

注: 疑似コードに $ 記号を使用しましたが、必ずしも jQuery に縛られているわけではありません。

4

3 に答える 3

3

正確に 1 回呼び出し$.ajax()、返された promise を (グローバルな)dictionary変数に格納する必要があります。

次に、結果を使用するたびに、 と書くだけdictionary.then(...)です。
AJAX リクエストがすでに終了している場合、コールバックはすぐに実行されます。

于 2013-09-30T16:49:27.017 に答える
1

たぶん $.when で偽の約束を作成しますか?

var promise;
if (dictionary) promise = $.when(dictionary);
else {
    promise = $.ajax({

    })
    .done(function(dictionary){
        // convert encoded values into names
    });
}

promise
    .done(function(){
        // run my application
    });
于 2013-09-30T17:08:45.723 に答える