を凍結しないで何探しているのはpromise
です。 jQueryの$.ajax
関数はすべてpromise
を返します。詳細はdocumentation hereをご覧ください。要点は、返された約束は、then
という関数を公開しています。これは、望むやり方で要求を次々に連鎖させるために使用できます。
それは非同期で動作するので、あなたがそう
request.then(
function successHandler(response) {
/* The first function will be called if the request is successful */
},
function failureHandler(response) {
/* The second function will be called if the request fails */
}
);
のように、要求が正常に完了し、あるいは失敗した場合、あなたが知っているようにハンドラを登録する必要があり、この種の
var request = $.ajax({
method: 'get',
url: 'www.google.com'
});
のAJAXリクエストを考えてみましょう
このパターンを使用すると、要求が成功するか失敗するかを待ってから次のパターンに進むことができます。
そのまま以前のコードセクションを残し
あなたはある種のキューを実装する必要があります。ほとんどのブラウザには、約2〜5件の同時リクエストの上限があります。例では、私はOPは彼が求めているの質問に基づいてこれを理解するつもりはないことを感じて
`.success`ハンドラを使用して
var emailAddresses = [/* a list email addresses */];
var MAX_SIMULTANEOUS_REQUESTS = 4;
var CURRENT_REQUESTS = [];
function runRequests(emailAddresses, max, running) {
while(running.length < max) {
running.push(createRequest(emailAddress.pop(), running));
}
return emailAddresses.length;
}
function createRequest(emailAddress, running) {
var request = /* Creates requests in some manner */;
request
.then(
function() {
/* Remove this request from the list of running requests */
var indexOfRequest = running.indexOf(request);
running.splice(indexOfRequest, 1);
},
function() {
/* For extra points, add this to a retry queue */
}
);
return request;
}
/* Usage */
var interval = setInterval(function() {
var remaining = runRequests(emailAddresses, MAX_SIMULTANEOUS_REQUESTS, CURRENT_REQUESTS);
if (remaining === 0) {
clearInterval(interval);
}
}, 500);
.. – Rayon