AngularJS 异步函数调用

AngularJS asynchronous function call

如何在 Angular 控制器中异步调用函数?我读过有关承诺的信息,但这不是 http 调用,所以我不能使用它。 有什么办法可以解决这类问题吗? 我想显示 spiner/loader 直到被调用的函数完成它的工作。

//控制器JS

   $scope.myFunctionCallOnClick = function()
   {
            if($scope.type=='TYPE1')
            {

               $scope.showSpiner();
              //This function has called syncronously, and i can't display my spiner
                Utils.doStuff(words,$scope);
                $scope.hideSpiner();
            }
            else
            {
                Utils.doStuff2(words,$scope);
            }
    }

//Utils.js - 这是我的助手工厂

angular.module('app').factory('Utils', function() {
    var factory = {}; 
    ..
    .. 

    factory.doStuff = function()
    {
        var iteration = 10000000;
        whilte(iteration > 0)
        {
          console.log(iteration);
        }

    }
      ..
      ..
       return factory;
});

您可以使用 $timeout 异步调用函数

$timeout(function(){

      /// function logic    

}, 0);

同样你甚至可以使用.. $evalAsync

阅读更多关于他们的信息here

使用 $timeout 服务让浏览器完成它的一些工作(在这种情况下显示您的微调器),并从 $timeout 回调中调用 doStuff。

$scope.myFunctionCallOnClick = function () {
    if ($scope.type == 'TYPE1') {

        $scope.showSpiner();

        $timeout(function () {
            Utils.doStuff(words, $scope);

            $scope.hideSpiner();
        });

    }
    else {
        Utils.doStuff2(words, $scope);
    }
}