2014-12-12 1 views
-2

오랫동안 다중 setTimeout을 사용할 수 있고 값을 확인할 때까지 기다릴 수있는 Javascript 함수를 만들려고했습니다.자바 스크립트 setTimeout 다중 및 아약스 및 대기 시간

나는 형태로 입력을 가지고 :

<input type="hidden" id="answer_content" value="start" />; 

    if($('#answer_content').val()=='start') 
    { 
    1)create a content with an ajax request that generate a div 
    1.1)when the request is finished , $('#answer_content').val('NEW_DIV_ID') 
    1.2)then i use this id = NEW_DIV_ID to make another ajax request (move the DIV) 
    1.3)Then when it's finished i change $('#answer_content').val('start'); 
    } 

는 여기 프로세스 1) 수행 및 DIV 요소가 존재 할 때까지 기다릴 필요가있다.
은 그 때 나는
그래서 프로세스가 거의 같은

있습니다) .... 3) 4) 5) 6)
이 (DIV 크기, 테두리 색상 같은 모든 과정 사이에만 약간의 변화가있다) 과정 2를 실행해야

1 차 함수에 대해 지연 = 1000, 두 번째 함수에 지연 = 2000, 마지막 함수에 지연 = 2000을 사용하여 다중으로 작업 할 수 있습니다 (setTimeout).

setTimeout(function(){ content_1(); }, 1000); 
    setTimeout(function(){ content_2(); }, 2000); 
    setTimeout(function(){ content_3(); }, 3000); 
    setTimeout(function(){ content_4(); }, 4000); 
    ...... 

작동하지만 오류를 피하기 위해 이전 프로세스가 완료된 경우에만 작동 할 수있는 기능이 필요합니다.

+0

제대로 귀하의 질문에 내 코드를 포맷하는 방법을 배울 http://stackoverflow.com/help/formatting을 읽어 보시기 바랍니다. –

+0

약속을 사용하여 작업을 해결하십시오. "JavaScript promise"에 대해 그냥 google –

+0

setTimeout은이 문제에 대한 적절한 해결책이 아닙니다. –

답변

0

아마 이런 식으로 뭔가 :

window.step = 1; 
var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
     switch(step){ 
      case 1: 
       // do something with xhr response (xhr.responseText); 
       step++; 
       xhr.open("GET", url2, true); 
      break; 
      case 2: 
       // do something with xhr response #2 (xhr.responseText); 
       step++; 
       xhr.open("GET", url3, true);     
      break; 
      case 3: 
       // do something with xhr response #3 (xhr.responseText);   
      break; 
     } 
    }else{ 
     console.log('error occured in request no#' + step); 
    } 
} 
xhr.open("GET", url1, true); 
+0

고마워, 좋은 생각이야,하지만 각 프로세스에서 기다릴 필요가 아약스 요청 후 생성되는 값 (반환 값)을 얻을 필요가있다. 나는 값을 기다리지 않으면 새로운 div가 이전 것. – Lorenzo

+0

이전 요청이 완료된 경우에만 다음 요청을 열어 대기합니다. –

+0

좋아, 나는 이것을 다시 시험해 볼 것이다. 다시 감사한다. – Lorenzo

관련 문제