Почему обещания 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
циклы.