2014-10-22 1 views
-1

어딘가에 내 코드에서Deferred()가 동 기적으로 실행되도록 강제하는 방법이 있습니까? 이 거기에 코드에서 다른

function getMyDeferred() { 
    var deferred = $.Deferred(); 
    $.ajax(url, { 
     success: function(data) { 
      deferred.resolve(data); 
     } 
    }); 
    return deferred; 
} 

, 나는이 방법을 접근하고, 이연 객체를 얻고있다. 지연이 완료 될 때까지 현재 행에서 대기하도록 강제 할 수있는 방법이 있습니까? 이것이 아마도 약속의 철학과 연기의 철학에 위배된다는 것을 알지만, 그것을 할 수 있습니까? 이런 식으로 뭔가 :

var deferred = getMyDeferred(); 

// do something here to ensure we do not proceed to the 
// next step until deferred has been resolved 

nextStep(); 
+0

대신 동기식 아약스를 사용 하시겠습니까? Ofc는 나쁜 습관이고 권장 사항은 아니지만 그것이 원하는 것이라면 .. –

+0

Fabricio는 모든 의도와 목적을 위해 첫 번째 코드 블록에 대해 아무 것도 변경할 권한이 없다고 가정합니다. 내가 가진 것은 둘째입니다. 내가 실제로하고있는 일은 단위 테스트이므로 응답을 기다리기 전에 응답을 기다릴 필요가 있습니다. – SoaperGEM

+1

아, 알겠습니다. 대부분의 단위 테스트 프레임 워크는 비동기 테스트를 허용합니다. –

답변

0

그래서 자신을 사람들의 답변, 의견을 읽고, 연구 더 수행 한 후, 내 원래의 질문에 대한 대답은,이없는 단순히 이다.

Fabrício Matté의 의견을 가장 잘 들었는데, 처음에는 눈치 채지 못했던 것을 지적했습니다. 내가 사용하고있는 단위 테스트 프레임 워크에는 이미 비동기 테스트 옵션이 내장되어 있으므로 내가 여기서 간략하게 설명하고있는 것을 할 필요가 없다.

1

이 시도 :

getMyDeferred().done(nextStep); 
+0

여기서'$ .when()'을 사용하는 이유는 0입니다. 그냥'deferred.done()'을 사용할 수 있습니다. – jfriend00

1

당신은 정확합니다.

나는이 아마 당신은 옵션 "거짓 비동기"를 사용할 수 있습니다, 약속의 전체 철학에 가서

을 deferreds 그러나 깨닫는다. jQuery를 문서 (http://api.jquery.com/jquery.ajax/) 기본적으로

으로

function getMyDeferred() { 
    var deferred = $.Deferred(); 
    $.ajax(url, { 
     async: false, 
     success: function(data) { 
      deferred.resolve(data); 
     } 
    }); 
    return deferred; 
} 

은, 모든 요청 (즉, 이것은 기본적으로 사실 로 설정) 비동기 전송됩니다. 동기 요청이 필요한 경우이 옵션을 false로 설정하십시오. 도메인 간 요청 및 데이터 유형 : "jsonp"요청은 동기 작업을 지원하지 않습니다. 동기 요청은 브라우저 일시적으로 잠글 수 있으며 요청이 인 동안 모든 작업을 비활성화 할 수 있습니다. jQuery 1.8부터는 jqXHR ($ .Deferred)과 함께 async : false를 사용하는 것이 더 이상 사용되지 않습니다. jqXHR.done() 또는 비추천 jqXHR.success()와 같은 jqXHR0 객체의 해당 메소드 대신 성공/오류/완료 콜백 옵션을 사용해야합니다.

+0

모든 내용과 목적을 위해 Ajax 호출을 수정할 수있는 권한이 없다는 것을 상기에서 언급했다. – SoaperGEM

관련 문제