Por que as promessas do Q.js são assíncronas depois de resolvidas?
Se eu tiver o seguinte:
var deferred = Q.defer();
deferred.resolve();
var a = deferred.promise.then(function() {
console.log(1);
});
console.log(2);
... por que vejo 2 e depois 1 no console?
Entendo que essa saída está correta de acordo com as especificações do Promises, que dizem chamar a função no próximo tick (por exemplo,setTimeout()
), mesmo que já esteja resolvido, mas não entendo o motivo.
Eu gostaria de ter um código que chamathen
em uma série de promessas de forma síncrona, assumindo que todas as promessas foram resolvidas.
Meu caso de uso real é que estou tentando usar a implementação do Angular,$q
e quero todas asthen
retornos de chamada para executar no mesmo$digest
ciclo, para que eu não seja desnecessário subsequente$digest
ciclos.