2012-01-30 2 views
0

Google의 특정 프로젝트를 실행하기 위해 Google 앱 엔진을 사용합니다. 요청에 부과되는 30 초 제한 시간 때문에 커서 및 memcache를 사용하여 데이터 가져 오기 프로세스를 제한합니다.Google 애플리케이션 엔진 + jquery ajax 지연 + 커서

문제 문 :

  1. 나는 일부 사용자 상호 작용에 의해 생성 된 I는 서버에서 필요로하는 모든 세부 사항의 목록은 기본적으로 아약스 통화 기록을
  2. 통화 로그의 각 아약스 호출 할 수있다 30 초 제한에 도달 할 수있는 데이터가 있습니다. 그래서 그것을 분해하고 부품으로 돌려 보내야합니다.
  3. 로그의 모든 호출이 완료되면 반환 데이터를 기반으로 일부 사용자 지정 논리를 수행해야합니다.

지금, 나는 이미 이런 방식으로 작동하는 솔루션이 있습니다

  1. 가 돌아 왔을 때 어떤 임의의 식별자
  2. 가진 첫번째 Ajax 호출을 시작을, 필요한 모든 데이터 여부를 확인하는 몇 가지 매개 변수를 확인 획득되었습니다. 그렇지 않으면
  3. 는 다음 단계에서와 같은 임의의 식별자로, 다시 호출을 수행 한 +, 지금까지
  4. 예라면 인출 된 어떤 데이터 저장 로그에서 항목을 제거하고 다음 항목
을위한 단계를 반복합니다

그러나이 코드는 모두 현재 ajax 호출 성공 이벤트에서 처리 중입니다. 나는 jQuery Deferreds에 대해 읽었고, 현재 채용되고있는 끔찍한 코드를 고치는 좋은 후보자처럼 보입니다.

는 이미 다음 알아 냈어요 : 종류의 동적 통화 목록을 만들 수

  1. 사용 $.when.apply(null, arrayOfDeferreds)을 -
  2. 지금 데이터 덤프를 저장하여 deferred.done 기능을 사용할 수 있습니다 jQuery.when 읽기 각각의 호출에 대해
    문제는, 요청을 다시 호출해야한다면 ajax 요청을 해결하지 않는다는 것입니다. 단지 데이터를 저장하고 그와 동일한 임의의 식별자로 다시 호출을 수행합니다. 초기 전화? 모든 데이터가 저장 될 때까지 기본적으로 내 done 함수를 반복적으로 호출하는 것입니다. 이를위한 더 좋은 방법이 있다면 설명을하십시오. 다음과 같이
+0

각 AJAX 호출에 파이프를 연결하여 완성되었는지 확인할 수 있습니다. 그런 다음 파이프에서 아약스 호출을 다시 정의하여 다시 호출해야한다는 것을 알았습니다. –

답변

2

당신은 반복적으로 파이프를 사용할 수 있습니다

function myFetch(id) { 
    return $.ajax({ 
     url: serviceURL, 
     data: { 
      id: id, 
      someOthers: data 
     } 
    }).pipe(function(data) { 
     saveData(data); 
     if (!isOK(data)) { 
      return myFetch(id); 
     } 
    }); 
} 

아약스 요청은 한 번만 정의하고 conditionaly 다시 문제 그것은 파이프 핸들러있다.

+0

감사합니다. –

관련 문제