문제

SetInterval 콜백 내에서 설정 타임 아웃을 호출하려고합니다.

function callback()
{
   //assign myVar
   var myVar = document.getElementById("givenID");
   //...
   //now wait 2 secs then call some code that uses myVAr
   setTimeout("myVar.innerHTML = 'TEST'", 2000);
}

setInterval("callback();", 10000);

SetInterval은 예상대로 작동하지만 Settimeout 호출이 실패합니다. 문제는 범위가 아닌 변수 (myvar)를 참조하고 있다는 사실과 관련이 있다고 생각합니다.

이것을 해결하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

이것은 폐쇄를위한 완벽한 후보입니다.

setInterval(
    function ()
    {
       var myVar = document.getElementById("givenID");
       setTimeout(
          function()
          {
              // myVar is available because the inner closure 
              // gets the outer closures scope
              myVar.innerHTML = "Junk";
          },2000);
    }, 10000);

당신의 문제는 범위와 관련이 있으며, 이는 그와 관련하여 작동합니다.

다른 팁

나는 비슷한 문제가 있었다. 문제는 settimeout ()을 통해 메소드 자체에서 메소드를 호출하려고했다는 것입니다. 나에게 효과가 없었던 이와 같은 것 :

function myObject() {

   this.egoist = function() {
      setTimeout( 'this.egoist()', 200 );
   }

}

myObject001 = new myObject();
myObject001.egoist();

다음도 작동하지 않았습니다.

... setTimeout( egoist, 200 );
... setTimeout( egoist(), 200 );
... setTimeout( this.egoist, 200 );
... setTimeout( this.egoist(), 200 );
... setTimeout( function() { this.egoist() }, 200 );

솔루션은 () 문과 같은 () 문과 사용하는 것이 었습니다.

function myObject() {

   this.egoist = function() {
      with (this) { setTimeout( function() { egoist() }, 200 );}
   }

}

myObject001 = new myObject();
myObject001.egoist();

물론, 이것은 끝없는주기이지만, 내가 여기서 만드는 요점은 다릅니다.

도움이 되었기를 바랍니다 :)

모범 사례의 문제로 문자열을 매개 변수로 사용하지 마십시오. setTimeout 그리고 setInterval 그것이 호출 될 것이기 때문입니다 eval ... 다음 양식을 사용하면이 문제가 더 쉽게 이해/디버그 할 수 있습니다.

setInterval(function () {
    // do stuff
    // ...
    // now wait 2 secs then call someFunction
    setTimeout(someFunction, 2000);
}, 10000);

Firefox에서 실행하고 도구를 확인하십시오 | 오류 콘솔. Settimeout이 실패하면 이유를 알려줄 수 있습니다.

또한 교체하십시오 "someFunction();" ~와 함께 "alert('hi')" (세미콜론 없음) 그리고 그것이 작동하는지 확인하십시오. 그렇다면 문제가 크게 좁아집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top