ind Angulars Versprechen asynchro

Ich habe vielleicht etwas an Angulars Versprechen verpasst, aber ich habe mich gefragt: Sind Versprechen asynchron? Ich bin mir nicht sicher, ob "asynchron" das richtige Wort ist, aber lass es mich erklären.

In meinem Code verwende ich Versprechen, um einen wirklich großen Prozess auszuführen (Lesen und Schreiben von Hunderten von großen Dateien), während ich eine Ladeleiste anzeige, um den Fortschritt des Prozesses zu verfolgen. Mir ist aufgefallen, dass mein Code, auch wenn er ein Versprechen enthält, nicht wirklich asynchron zu sein scheint und die Anzeige einfriert (ich gehe davon aus, dass er vom Hauptthread verwaltet wird).

Zum Beispiel im Code unten, den Sie in diesem finden können Plnkr, Ich frage mich, wie ich den Fortschrittsbalken bewegen kann, während der große Prozess abgeschlossen ist. Ich verstehe, warum es friert, wenn ich es im Haupt-Thread aufrufe, aber nicht, wenn ich Angulars Versprechen verwende.

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();
    });
  };
});

Antworten auf die Frage(6)

Ihre Antwort auf die Frage