Почему обещания Q.js асинхронны после их разрешения?

Если у меня есть следующее:

var deferred = Q.defer();

deferred.resolve();

var a = deferred.promise.then(function() {
    console.log(1);    
});

console.log(2); 

... почему я вижу 2, а затем 1 в консоли?

Я понимаю, что этот вывод верен в соответствии со спецификацией Promises, в которой говорится, что нужно вызывать функцию на следующем тике (например,setTimeout()), даже если это уже решено, но я не понимаю, почему.

Я хотел бы иметь код, который вызываетthen на серии обещаний синхронно, предполагая, что все обещания были выполнены.

Мой реальный пример использования - я пытаюсь использовать реализацию Angular,$qи я хочу, чтобы всеthen обратные вызовы для выполнения в том же$digest цикл, так что я не получаю ненужных последующих$digest циклы.

Ответы на вопрос(1)

Ваш ответ на вопрос