2013-08-30 2 views
0

파일 처리가 완료되었는지 확인하기 위해 매 5 초마다 발생하는 이벤트가 있습니다.Internet Explorer에서 첫 번째 반복 후 setTimeout이 실행되지 않습니다.

나는 다음과 같은 일을 해요 :

if (InSuppArray(item.Id) == false && item.Status() == "Queue") { 
    var t = setTimeout(function() { checkQueuedSupp(item.OrderId) }, 5000); 
    suppIds.push({ Id: item.OrderId, TimerId: t }); 
} 

은 기본적으로 여러 개의 파일이 너무 업로드 할 수 있습니다이 타이머의 배열을 생성하고, 파일이 완료 그들을 죽인다.

Firefox와 Chrome에서 잘 작동하지만 타이머는 Internet Explorer에서 한 번만 실행됩니다.

더 좋은 방법이 있나요? 나는 주변에서 검색하고 IE와 setTimeout과 함께 몇 가지 문제를 발견했지만 대부분은 적어도 IE에서 작동하지 않는다는 사실을 암시했다.

+3

여러 개의 타임 아웃을 만드는 대신'setInterval'을 사용하면 죽일 때까지 매 5 초마다 함수를 호출 할 수 있습니다. – Cfreak

+2

'setTimeout' 및 IE와 관련하여 내가 아는 모든 문제가 없습니다. 당신은 문제가 어딘가에 있어야합니다. – plalx

+0

헤더에서 언급 한 반복의 원인은 어디입니까? 게시 한 스 니펫에는 반복이 없습니다. – Teemu

답변

0

1) 첫 번째 반복 작업 중이십니까? 네, 코드가 잘 작동합니다.

setTimeout는 반복적 인 방법이 아닙니다 : 반복적 인 경우하는 문제는 다음 확인입니다

2). 대신 setInterval을 사용하십시오.

if (InSuppArray(item.Id) == false && item.Status() == "Queue") { 
    var t = setInterval(function() { checkQueuedSupp(item.OrderId) }, 5000); 
    suppIds.push({ Id: item.OrderId, TimerId: t }); 
} 

setTimeout이 같은 반복적 인 확인이 recursive을 가지고 만들려고합니다.

+0

재미있는 것은 FF/Chrome과 IE에서는 5000ms가 약간 다르게 보인다는 것입니다. 왜냐하면 IE가하지는 않지만 항상 성공 메시지를 읽는 것을 끝내기 때문에저기서 작업하고있는 것처럼 보였기 때문입니다. 도와 주셔서 감사합니다! – zach

0

setTimeout은 반복적으로 실행하지 않고 함수를 실행하는 것을 지연시키는 것입니다. 당신이 원하는 것은 당신이 지정한 모든 시간 간격 동안 함수를 실행할 setInterval입니다.

관련 문제