実際には単純な解決策があります。さんは、すべての応答が到着したときに実行する必要のあるfunction
を実装してみましょう:今すぐ
function onFinished(responses) {
//Do something
}
、あなたは配列として日付を返すfunction
を持っていると仮定してみましょう:
function getDates(range) {
//Do something
}
はまた、我々はgetURL
を必要とし、
function getURL(date) {
//Do something
}
最後に、あなたが持っているdateRange
という変数があるとしましょう。このようなあなたはgetDates
の入力として使用します。だから我々はこれを行うことができます:
var requestDates = getDates(dateRange);
var requestsPending = requestDates.length;
var responses = [];
for (var requestIndex in requestDates) {
$.ajax({
url: getURL(requestDates[requestIndex]),
method: "GET",
//You might pass data as well here if needed in the form of
//data: yourobject,
}).done(function(data, textStatus, jqXHR) {
//Handle response, parse it and store the result using responses.push()
}).fail(function(jqXHR, textStatus, errorThrown) {
//Handle failed requests
}).always(function(param1, param2, param3) {
if (--requestsPending === 0) {
onFinished(responses);
}
});
}
これはあなたが必要とする各日付のAJAX要求を送信し、非同期的にそれらの応答を待って、そう、あなたが効果的に保留中の時間の合計を待ちますが、最長のために保留していないだろう時間、これは最適な最適化です。 Javascriptはシングルスレッドなので、マルチスレッドでこの問題を解決することは不可能です。したがって、要求がサーバー上で互いを待たずに応答を非同期に待つ必要があります。サーバーを所有している場合は、日付ごとにリクエストを送信する必要はなく、日付範囲を処理するサーバー側API関数を実装する必要があります。そのため、クライアント側は単一のリクエストを送信し、回答。
これは有望そうです。私はそれを徹底的に調べます。 :-) – blazs