Encadena ajax y ejecútalo en secuencia. Jquery Deferred

Tengo 3 procesos que necesita ajax para completar. Pero es asíncrono y no hace lo que quería hacer ...

Digamos:

function a(param1, param2) {
     $.post(..., function(result){
         if(result){
            b();
         } else {
            console.log("failed a");
         }
     })
}

function b() {
      $.post(..., function(result){
         if(result){
            c();
         } else {
            console.log("failed b");
         }
     })
}

function c() {
     $.post(..., function(result){
         if(result){
            console.log("successful");
         } else {
            console.log("failed b");
         }
     })
}

Quiero que se ejecute asi

a
b
c

Ese código funcionará perfectamente, como puede ver ... pero si usa un bucle.

 var data = [{param1 : 1235, param2: 3214},  {param1 : 5432, param2: 9876}];

 $.each(data, function(k,v){
      a(v.param1, v.param2)
 });

No funcionará como se esperaba y solo funcionará:

a
a
b
b
c
c

en lugar de

a
b
c
a
b
c

Respuestas a la pregunta(5)

Su respuesta a la pregunta