限られたストリームで順次非同期 ajax リクエストを行う必要があります。現在、Web サーバー上で占有できるストリームは 1 つだけなので、一度に実行できる ajax リクエストは 1 つだけです。
一度に1つのストリームしか使用できない場合に役立つ次の機能があります。
function initiateChain() {
var i = 0;
var tasks = arguments;
var callback = function () {
i += 1;
if (i != tasks.length) {
tasks[i](callback); //block should call callback when done otherwise loop stops
}
}
if (tasks.length != 0) {
tasks[0](callback); //initiate first one
}
}
3 つの ajax ヘルパー関数があるとします。
function getGadgets(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getBooks(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getDeals(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
次の呼び出しにより、このクライアントから 1 つ以上の ajax リクエストが行われないことが保証されます
initiateChain(getGadgets, getBooks, getDeals);
次に、initiateChain を拡張して、任意の数のストリームをサポートする必要があります。2 つまたは n 個のストリームを使用することが許可されているとします。ajax ヘルパー関数 getGadgets、getDeals、getDeals を変更せずにそうするためのアイデアを知りたいと思います。
つまり、一連の関数 N があります。この場合は、getGadgets、getDeals、および getDeals(|N|=3) で、それぞれ Web サーバーへの接続が必要です。現在、一度に 1 つのリクエストしか実行できないため、initiateChain 関数は 3 つのメソッドを順番に呼び出します。M 接続にアクセスできる場合、|N| を実行したいと思います。並列に機能します (最大 M まで)。