我希望浏览器在执行下一行代码之前等待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);
});
答案 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);