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.