2013-05-23 5 views
-1

발생하는 동안보고하려는 장기 실행 데이터베이스 업데이트가 있습니다. 내가 발사 할 인터벌 시간을 으로 만들었습니다. setInterval에서 많은 문제를 겪었고 간단 해 보이지만이 코드로는 발사 할 수 없습니다. checkSaveStatus 코드는 얼마나 많은 행이 저장되었는지를 알려주는 상태 보고서를 가져옵니다. 기본 기능을 작동 시키면 결과를 표시하기 위해 한 번 향상시켜 보겠습니다.javascript setInterval proble

저는 이것이 Ajax 호출을 처리하는 방식과 관련이 있다고 생각하기 시작했습니다.

var checkTimer; 
function checkSaveStatus() { 
    var saveStatus = ajaxCall("WebServices/FLSAService.asmx/CheckFLSASaveStatus"); 
    if (saveStatus == null) { 
     clearInterval(checkTimer); 
     return; 
    } 
    log('saveStatus: ' + saveStatus.InputCount + '/' + saveStatus.ResultCount + ':' + saveStatus.SaveComplete, 'FLSA'); 
    if (saveStatus.SaveComplete) { 
     reportSaveComplete = true; 
     clearInterval(checkTimer); 
    } 
} 

checkTimer = window.setInterval(checkSaveStatus, 1000); 
... make an asynchronous Ajax call that takes a long time to complete 
... the checkSaveStatus code doesn't fire until the Ajax call completes 

답변

0

내가 아는 한 비동기이기 때문에 아약스에서 값을 반환 할 수 없습니다. 처리되는 방법은 콜백을 통한 것입니다. 코드의이 부분은 다음과 같습니다.

var saveStatus = ajaxCall("WebServices/FLSAService.asmx/CheckFLSASaveStatus"); 
if (saveStatus == null) { 
    clearInterval(checkTimer); 
    return; 
} 

제대로 작동하지 않을 가능성이 있습니다. ajaxCall 기능을 보지 않고도 말하기는 어렵지만, 의도 한 결과를 얻지 못할 수도 있습니다. 왼쪽 사이드 할당은 비동기적인 것을 반영하지 않을 것입니다. 결과적으로 기본값이 ajaxCall에서 반환되거나 undefined이되며 == null과 비교하면 해당 간격이 지워지고 반환됩니다.

관련 문제