1

$.ajax と $.getJSON で 2 つの $.when.apply() を使用しようとしています。1 つを別の内部に埋め込もうとしていますが、機能していないようです。概要は次のとおりです。

var jxhr = [];
var kxhr = [];

$.when($.getJSON('stuff.js', function(cart){
    //Grab Stuff
})).then(function(){
       for(i<stuff)
       {
           jxhr.push($.getJSON(array[stuff])
       }

       $.when.apply($, jxhr).done(function()
       {
           for(i<array2)
           {
               kxhr.push($.getJSON(array2[morestuff]))

           }
           $.when.apply($, kxhr).done(function())
           {
               //Finish up here.
               //Not running.
           }
       });
}

私がコードのビットを引っ張ったため、いくつかの構文エラーがありますが、構造はそこにあるはずです。問題は、2 番目の $.when.apply() が実行されないことです。これは制限ですか?埋め込まれた when を使用しないこのコードを構造化するより良い方法はありますか?

4

1 に答える 1

1

これは、promise アプローチのより垂直な連鎖です。それ$.getJSON自体が promise を返すため、最初の呼び出しを でラップする必要はありません$.when。ファイナルが呼び出されるthen's前に、2 つが順番に解決されなければならないことに注意してください。done

$.getJSON(url, function(cart) {
   $('body').append('<p>First getJSON call made</p>');
}).then(function(){
  var jxhr = [];
   $('body').append('<p>Start first loop then</p>')
  for (var i = 0; i < 5; i++) {
    jxhr.push(getSomeData('Loop 1'))
  }      
  return  $.when.apply($, jxhr)
}).then(function(){
   var kxhr = [];
  $('body').append('<p>Start second loop then</p>')
   for (var i = 0; i < 5; i++) {
      kxhr.push(getSomeData('Loop2'))
    }
   return $.when.apply(null, kxhr)
}).done(function(){
   $('body').append('<p>DONE!</p>');

});


function getSomeData(loop) {
  return  $.getJSON(url, function(res) {
      $('body').append('<p>'+loop+' getJSON call made</p>');
  })
}

DEMO

UPDATED DEMO(ネストされた配列データ出力を使用した、もう少し現実的なデータ処理)

于 2013-11-09T20:42:24.720 に答える