AngularJS异步函数调用

问题描述 投票:0回答:2

如何异步调用一个函数的角度控制器内?我心中已经阅读有关的承诺,但是这不是一个HTTP调用,所以我不能使用。有没有什么解决方案来解决这些样的问题?我想显示spiner /装载机,直到被调用的函数完成它的工作。

//控制器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;
});
angularjs asynchronous angular-promise
2个回答
1
投票

使用$超时服务来让浏览器做了一些工作的(显示在这种情况下,你的微调),并从$超时回调中调用doStuff。

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

        $scope.showSpiner();

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

            $scope.hideSpiner();
        });

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

0
投票

你可以用$超时异步调用的函数

$timeout(function(){

      /// function logic    

}, 0);

同样,您甚至可以使用.. $evalAsync

阅读更多关于他们here

© www.soinside.com 2019 - 2024. All rights reserved.