Jak zrobić sekwencyjne asynchroniczne żądania ajax z określoną liczbą strumieni

Muszę wykonać sekwencyjne asynchroniczne żądania ajax z ograniczonymi strumieniami. Na razie wolno mi zajmować tylko jeden strumień na serwerze WWW, więc mogę wykonać tylko jedno żądanie ajax na raz.

Mam następującą funkcję, która pomaga mi, gdy mogę używać tylko jednego strumienia na raz.

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
    }
  }

Powiedz, jeśli mam trzy funkcje pomocnika 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
 }

następujące wywołanie zapewnia, że ​​nie ma więcej niż 1 żądanie ajax z tego klienta

initiateChain(getGadgets, getBooks, getDeals);

Teraz muszę ulepszyć initiateChain, aby obsługiwał dowolną liczbę strumieni. Powiedzmy, że mogę używać 2 lub n liczby strumieni Chciałbym znać pomysły, aby to zrobić bez zmiany funkcji pomocnika ajax getGadgets, getDeals, getDeals.

Krótko mówiąc, mam zestaw funkcji, w tym przypadku getGadgets, getDeals i getDeals (| N | = 3), z których każdy wymaga połączenia z serwerem WWW. Obecnie mogę wykonywać tylko jedno żądanie naraz, więc funkcja initiateChain wywołuje trzy metody w sekwencji. Gdybym miał dostęp do połączeń M, chciałbym wykonać | N | działa równolegle (maksymalnie do M).

questionAnswers(3)

yourAnswerToTheQuestion