延迟的角度$超时

时间:2017-03-24 03:10:54

标签: javascript angularjs

我希望浏览器在执行下一行代码之前等待3秒钟。

$超时(3000);在脚本中似乎没有做到这一点。我在这做错了吗?

我在$ scope函数中使用它

app.expandController = function ($scope,$interval, $timeout) {

    $scope.nextLevel = function () {

            //stop numbers
            $scope.StopTimer();

            $timeout(function(){return true;},3000);

            //restart timer with new numbers
            $scope.StartTimer();

            $scope.thresholdwatch == false
        }
}

我通过将$ scope和$ timeout传递给另一个函数来分割控制器文件

app.controller('myCtrl', function ($scope, $interval, $timeout) {


    app.expandController($scope, $interval,$timeout);

});

3 个答案:

答案 0 :(得分:2)

我认为你在AngularJS中得到了关于$ timeout的想法,或者通常JS不正确。以下两个例子都不起作用。

$timeout(function(){return true;},3000); 
$timeout(3000);

$ timeout是一个非阻塞函数,因此调用它不会阻止JS运行它下面的代码。在Javascript和AngularJS中,没有真正的睡眠功能(用于睡眠的NodeJS lib实际上是它的C ++绑定,因此,不适用于使用AngularJS的客户端应用程序)。相反,为了确保您的代码将在特定的时间后运行,您将它放在$ timeout函数中:

$timeout(function(){
   //code need to be delayed must be in here
}, TIME_TO_WAIT_FOR); 

答案 1 :(得分:2)

如果您使用$timeout,则需要将下一个执行代码置于超时回调中。但是,与vanila js的简单黑客将是,

function sleep(ms) {
  var dt = new Date();
  while (Date.now() - dt.getTime() <= ms) {}
  return true;
}

console.log('timer start');
sleep(3000);
console.log('Printing after 3000ms');

答案 2 :(得分:1)

$ timeout的使用是错误的。使用方式如下:

$timeout(function(){
  // Do something in timeout
}, 3000);