encadenando promesas anidadas en un bucle

Soy un poco nuevo en las promesas y estoy atrapado en el siguiente ejercicio.

Tengo una serie de valores y quiero ejecutar una llamada asíncrona en cada uno. En la devolución de llamada, quiero ejecutar otra llamada en el resultado de la primera llamada.

Básicamente, mi frustración es la siguiente: el orden de ejecución debe ser '1x2x3x' pero el orden es '123xxx'

En otras palabras, el ciclo ya va a la siguiente iteración cuando la promesa sub / anidada de la primera promesa aún no se ha completado.

var values = ["1", "2", "3"];

function do(val) {
  var deferred = Q.defer();


  asyncCall(val)
  .then( function( response ) {
    console.log(val); 
    asyncCall(response)
    .then( function ( response ) {
      console.log('x');
      deferred.resolve(true)
    });
  });

  return deferred.promise;
}

var result = do(values[0]);

values.forEach( function(f) {
  result = result.then(do(f));
}

Probablemente haya una solución fácil, pero estoy atascado en ella.

Respuestas a la pregunta(1)

Su respuesta a la pregunta