AngularJS异步函数调用

时间:2016-02-21 12:12:26

标签: angularjs asynchronous angular-promise

如何在Angular控制器内异步调用函数?我读过有关承诺,但这不是一个http电话,所以我不能使用它。 有没有解决这些问题的解决方案? 我想显示一个spiner / loader,直到被调用的函数完成它的工作。

// Controller 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;
});

2 个答案:

答案 0 :(得分:1)

使用$ 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);
    }
}

答案 1 :(得分:0)

你可以使用$ timeout来异步调用函数

$timeout(function(){

      /// function logic    

}, 0);

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

详细了解他们here