Являются ли обещания 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();
    });
  };
});

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

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