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,$qe quero todas asthen retornos de chamada para executar no mesmo$digest ciclo, para que eu não seja desnecessário subsequente$digest ciclos.

questionAnswers(1)

yourAnswerToTheQuestion