요약 :functionA
은 예에서 functionB
보다 먼저 호출됩니다. jQuery.ajax
의 success
및 error
콜백 (예 : $.get
)은 나중에 jqxhr
개체에 연결된 콜백보다 먼저 호출됩니다. 음, 오늘 :-)
상세 사항 : jQuery.ajax()의 문서는이 문제를 언급하지 않습니다. 가능하다면 그것에 의존하지 않는 것이 좋습니다.
특정 jQuery 버전으로 개발하는 한 구현을 검사하여 변경되지 않는다고 가정 할 수 있습니다. 업그레이드하는 경우 가정이 유효한지 확인해야합니다. 예를 들어
, jQuery를 지원되는 모든 지점 (1.12.4, 2.2.4 및 3.1.1) 호출자가 jqxhr
객체를 가져 와서 등록 할 수 있습니다 전에 jQuery.ajax 설정 에서 success
및 error
콜백을 등록의 최신 릴리스 그들의 콜백. jqxhr
오브젝트는 Deferred Object으로, 해상도 또는 거부에 첨부 된 핸들러는 첨부 순서대로 실행됩니다. 예를 들어 deferred.done()의 설명서에서 확인할 수 있습니다. 즉, success
과 error
의 jQuery.ajax 설정 콜백은 나중에 반환 된 jqxhr
개체에 첨부 된 콜백보다 항상 먼저 호출됩니다.
는 jQuery.ajax 3.1.1 sources를 참조하십시오
// Install callbacks on deferreds
completeDeferred.add(s.complete);
jqXHR.done(s.success);
jqXHR.fail(s.error);
내가 실행 순서를 변경하면 미래 jQuery를 업데이트 오히려 가능성이 있음을 인정. 그것이 내가 생각하기에, 그것에 따라 꽤 안정적 일 것이라고 생각하는 이유입니다.
@RoryMcCrossan 감사합니다. 흥미 롭습니다. "동시에 실행하십시오"- 다른 스레드에서 호출 될 것이라고 말하고 있습니까? 대부분의 JS가 순차적으로 실행되는 것처럼 보이기 때문에 놀랍습니다.하지만 오늘의 브라우저에서 가능한 모든 것이 있다고 가정합니다! –
죄송합니다. 잘못된 것입니다. 순서대로 실행됩니다. https://jsfiddle.net/wm1t4zrh/ –
여기에서 정답은 두 가지를 모두 사용하지 않는 것입니다. 하나의 기법이나 다른 기법을 선택하십시오. 내 강한 선호는 다른 방법으로 훨씬 더 유능하기 때문에 약속입니다. – jfriend00