encadeando promessas aninhadas em um loop
Sou um pouco novo nas promessas e estou preso no exercício a seguir.
Eu tenho uma matriz de valores e quero executar uma chamada assíncrona em cada um. No retorno de chamada, desejo executar outra chamada no resultado da primeira chamada.
Basicamente, minha frustração é a seguinte: A ordem de execução deve ser '1x2x3x', mas a ordem é '123xxx'
Em outras palavras, o loop já está indo para a próxima iteração quando a promessa sub / aninhada da primeira promessa ainda não foi concluída.
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));
}
Provavelmente existe uma solução fácil, mas estou preso a ela.