Как выполнять последовательные асинхронные запросы ajax с заданным количеством потоков

Мне нужно делать последовательные асинхронные запросы Ajax с ограниченными потоками. На данный момент мне разрешено занимать только один поток на веб-сервере, поэтому я могу одновременно выполнять только один ajax-запрос.

У меня есть следующая функция, которая помогает мне, когда мне разрешено использовать только один поток за раз.

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

Скажите, если у меня есть три вспомогательные функции 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), для каждой из которых требуется соединение с веб-сервером. В настоящее время я могу выполнить только один запрос за раз, поэтому функция initiateChain вызывает три метода последовательно. Если бы у меня был доступ к М-соединениям, я бы хотел выполнить | N | работает параллельно (до максимума M).

Ответы на вопрос(3)

Ваш ответ на вопрос