Cómo hacer solicitudes ajax asíncronas secuenciales con un número dado de flujos

Necesito realizar solicitudes ajax asíncronas secuenciales con flujos limitados. A partir de ahora, solo puedo ocupar una secuencia en el servidor web, así que solo puedo hacer una solicitud ajax a la vez.

Tengo la siguiente función que me ayuda cuando puedo usar solo una secuencia a la vez.

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

Decir si tengo tres funciones de ayuda 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
 }

la siguiente llamada garantiza que no se realice más de 1 solicitud ajax desde este cliente

initiateChain(getGadgets, getBooks, getDeals);

Ahora necesito mejorar initCain para admitir un número arbitrario de flujos. Digamos que se me permite usar 2 o n número de transmisiones. Me gustaría saber ideas para hacerlo sin cambiar las funciones de ajax helper getGadgets, getDeals, getDeals.

En resumen, tengo un conjunto de funciones, N, en este caso getGadgets, getDeals y getDeals (| N | = 3) que necesitan una conexión al servidor web. Actualmente, solo puedo ejecutar una solicitud a la vez, por lo que la función initteChain llama los tres métodos en secuencia. Si tuviera acceso a M conexiones, me gustaría ejecutar | N | Funciones en paralelo (hasta un máximo de M).

Respuestas a la pregunta(3)

Su respuesta a la pregunta