Являются ли обещания Angular асинхронными?
Возможно, я что-то упустил из-за обещаний Angular, но мне было интересно кое-что: являются ли обещания асинхронными? Я не уверен, что слово «асинхронный» - правильное слово, но позвольте мне объяснить.
В своем коде я использую обещания сделать действительно большой процесс (читать и записывать сотни больших файлов), пока я отображаю панель загрузки, чтобы наблюдать за ходом процесса. Я заметил, что даже если мой код находится в обещании, он, по-видимому, на самом деле не асинхронный и не останавливает отображение (которое, как я полагаю, управляется основным потоком).
Например, в приведенном ниже коде, который вы можете найти в этомPlnkrМне интересно, как позволить индикатору прогресса двигаться, пока большой процесс завершен. Я понимаю, почему он зависает, когда я вызываю его в главном потоке, а не когда использую обещания Angular.
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope, $q) {
function hugeProcess () {
var i = 0;
var start = new Date().getTime();
while (i++ < 100000) {
console.log(i);
}
var end = new Date().getTime();
var time = end - start;
$scope.processTime = 'Done in ' + time + 'ms';
}
$scope.onClickStartHugeProcess = function () {
console.log('onClickStartHugeProcess');
hugeProcess();
};
$scope.onClickStartHugeProcessWithPromise = function () {
console.log('onClickStartHugeProcessWithPromise');
$q.when()
.then(function () {
return hugeProcess();
});
};
});