AJAXを使用してデータブロックのコレクションをロードしています。これらのブロックはそれぞれDOM内で順にレンダリングする必要があるため、最初のブロックを要求してレンダリングしてから、最後のブロックまで次のように要求します。複数のAJAXが順番に成功
function loadBlock(block, limit) {
var deferred = $.Deferred();
(function request(block, limit) {
$.ajax({
url: 'block/' + block,
success: function(html) {
$('#block-' + block).html(html);
var nextBlock = block + 1;
if (nextBlock <= limit)
request(nextBlock, limit);
else
deferred.resolve();
}
});
})(block, limit);
return deferred.promise();
}
しかし、以前の要求のために、この全体の待ち時間がたくさんプロセスを遅くすることができます完了するために:最後の1が行われた場合、繰延オブジェクトは、すべてのブロックがロードされた別の関数を通知するために解決されます。
だから私は何をしようとしているのは、一度にすべてのリクエストを起動して、できるだけ多くのサーバーを取得させることですが、対応するリクエストが完了した後に各ブロックをロードするのではなく、前のものがロードされるまで繰り返す。
例:10個のリクエストが送信されます。 1、2、3、...順番にブロックをレンダリングしたいとしましょう。最初の3つのブロックのリクエストが順番に完了しているので、ブロックがページにロードされているとしますが、ブロック5ブロック4の前に準備が整っていれば、ブロック5をどこかに保ち、ブロック4がそこにあるとき、つまりブロック4の要求が完了してレンダリングされた後にのみページに表示したいと思うでしょう。
私の質問は、以下のとおりです。
- はどのようにして並列に実行することができますページ内のブロックを読み込み要求と他の機能を発射するいくつかの機能?
- 前のブロックがロードされた特定のブロックをロードする機能を通知することができます。
また、遅延ロジックを維持する必要があります。なぜなら、プロセス全体が完了した時点でも信号を送信する必要があるからです。
答えをもう少し開発できますか?私は自分のシナリオでそれをどのように統合するのかわかりません。 – dabadaba