2017-03-24 4 views
0

다음 코드 행을 실행하기 전에 브라우저가 3 초 동안 기다리 길 원합니다.

$ timeout (3000); 스크립트에서 트릭을 수행하지 않는 것 같습니다. 내가 여기서 잘못된 일을하고 있니?

은 내가 $ 범위 기능

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 
     } 
} 

내부에 그것을 사용하고 난 다른 함수

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


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

}); 

답변

2

당신이 $timeout을 사용하는 경우 제한 시간에 다음 실행 코드를 배치해야 콜백. 그러나 바닐라의 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');

1

$ 제한 시간의 사용이 잘못에 $ 범위 및 $ 타임 아웃을 전달하여 컨트롤러 파일을 분할. 다음과 같이 사용하십시오 :

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

$ 타임 아웃 (,, 3000 기능() {true를 반환})이 될 것입니다; 아직 브라우저가 3 초 동안 기다리지 않고 있습니다. –

+0

코드를 볼 수 있습니까? –

1

AngularJS의 $ timeout에 대한 아이디어를 얻거나 일반적으로 JS가 틀렸다고 생각합니다. 아래 예제는 모두 작동하지 않습니다.

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

$ timeout은 비 차단 기능이므로 JS를 호출하면 JS가 그 아래의 코드를 실행하지 않습니다. Javascript 및 AngularJS에는 절전 기능이 없습니다 (절전 모드의 NodeJS lib는 실제로 C++ 바인딩이므로 AngularJS를 사용하는 클라이언트 측 응용 프로그램에는 적용 할 수 없습니다). 대신, 코드는 특정 시간 이후에 실행됩니다 있는지 확인하려면은 $ 시간 제한 함수 안에 넣어 :

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