2011-09-01 3 views
0

저는 현재 restfull 서비스의 데이터에 액세스하기 위해 많은 ajax 요청을 사용하는 프로젝트를 진행하고 있습니다. 일부 조작에는 다중 순차 호출이 필요합니다. 최대한 빨리 이들 중 첫 번째를 구현하면 경쟁 조건이 발생했습니다. (ajaxCall_1을 호출 한 다음 ajaxCall_1을 호출 한 결과, ajaxCall_1을 반환하지는 못했습니다). 물론 .success 속성을 사용할 수는 있지만 그건 저를위한 속임수가 아닙니다. 아래의 간단한 예제를 통해 설명하겠습니다. 나는 포함은 .js 파일을 가지고 :JQuery 약속 질문

function getServerBoolean(){ 
    $.get('url_1',function(data){return data)}); 
} 

function refreshWidget(){ 
    $.get('url_2',function(data){ 
     var serverBoolean = getServerBoolean(); 
     --do some html building here based on boolean returned from server-- } 
    ); 
} 

function setServerValue(newValue){ 
    $.post('url',{key:newValue},function(data){ 
     // server model has changed, so refresh widget. 
     refreshWidget(); 
    }); 

} 

내가 ('someValue와') setServerValeu를 호출 할 때마다, 위젯 자체를 새로해야하지만이 작업을 수행하기 전에 서버 부울 값을 알 필요가있다. 이런 식으로 나는 더 많은 siutations을 가지므로, 단순히 메소드의 인자로 콜백을주고, .success()에서 호출하면 나에게 트릭을주지 않는다.

나는 $ .when $ .then $ .done 메소드를 발견했지만 자신의 상황에서 어떻게 사용하는지 모르겠습니다. 이걸 어떻게 설정할 수있는 사람이 있습니까?

미리 감사드립니다.

리처드

+0

왜 .success()를 사용하여 ajaxCall_2가 포함 된 함수를 호출 할 수 없습니까? –

+0

서버에 대한 많은 rest/ajax 호출을 포함하는 API가 있습니다. 이러한 메서드를 사용하여 콜백을 사용하려면 콜백이 포함 된 여러 중첩 된 호출이 끝날 것이므로 코드 유지 관리로 인해 원하는 것은 아닙니다. 그 다음으로 매개 변수로 콜백 함수를 허용하는 모든 메서드를 변경해야 할 것입니다, 이것은 또한 내가 원하는 것이 아닙니다, 가능한 API를 깨끗하게 유지하고 싶습니다. $ .when(). 그러면 완벽하게 처리됩니다. (그리고 그것은 나를 위해 매력처럼 작동합니다) – Bjarne77

답변

1

내가 할 약 $ .when $ 다음 $를 알고 있지만 주변에 콜백을 전달하는 것이이 일의 기능 방식으로하지 않습니다. 그것은 그렇게 볼 수 있었다 : 몇 가지 기본 콜백으로 설정되어 있지 않은 경우는 물론

function getServerBoolean(dataCallback){ 
    $.get('url_1', dataCallback); 
} 

function refreshWidget(){ 
    $.get('url_2',function(data){ 
     getServerBoolean(function(boolValueReturned) { 
      //do something with the value 
     }); 
    }); 
} 

이 우리가 가진 인수가 함수 인 경우 (getServerBoolean에서) 확인, 예를 들어 같은이를 조정할 수있는 수많은 방법이 될 및 수있다.

+0

이것은 좋은 것 같습니다. 나는 이것을 시도 할 것이다. 나는 이것이 (내 경우에는) 결국 많은 중첩 된 메소드/콜백으로 끝날 것이라고 두려워한다. 나는 $ .when()을 기대했다. 그 다음에 접근하면 일어나는 것을 피할 수있다 .. – Bjarne77

+0

어쨌든 가장 깨끗한 접근법이다. jQuery 문서의 설명과 기본적으로 비슷한 점을 확인했습니다. 다른 콜백이 수행 된 후에 실행되는 콜백을 전달합니다. 콜백 중 대부분 (전부는 아닐 경우)이 명명 된 함수로 정의 된 경우 코드가 너무 복잡해서는 안되며 원하는 순서로 콜백 함수를 전달하는 "흐름"또는 함수를 정의해야합니다. – WTK

+0

함수라는 용어는 var에 함수를 할당하는 것입니까? 그리고 .call() 메서드를 사용합니까? – Bjarne77