我的服务中有一个函数需要花很长时间才能计算出来,因此我想在示波器上显示一条消息以表明它正在计算。
我在这里创建了一个(简化的)jsfiddle:http://jsfiddle.net/rikboeykens/brwfw3g9/

var app = angular.module('myApp', []);

app.service('testService', function(){
    this.longFunction=function(){
        for (var i=0; i<1000000000;i++){


        }
    }
});

function TestCtrl($scope, testService)
{
    $scope.$apply(function(){$scope.waiting="not waiting";});
    $scope.longFunction = function(){
        $scope.waiting="waiting";
        testService.longFunction();
        $scope.waiting="not waiting";
    }
}


testService上的longFunction大约需要两秒钟才能完成,但是$ scope.waiting不会在此过程中更新为“ waiting”。

我尝试使用$ scope。$ apply,但随后出现一个错误,提示$ apply已经在进行中。

如果我在testService上异步执行longFunction,它将起作用吗?我一直在研究使用诺言,但是我不确定如何去实现它们。

最佳答案

您可以使用$timeout

function TestCtrl($scope, testService, $timeout)
{
   $scope.waiting="not waiting";
    $scope.longFunction = function(){
        $scope.waiting="waiting";
        $timeout(function(){
          testService.longFunction();
          $scope.waiting="not waiting";
        })
    }
}

10-08 05:00