지연과 약속의 차이점은 무엇인가요?
약속
Promise는 비동기 함수가 반환하는 객체입니다. 이러한 함수를 직접 작성하려면 deferred를 사용해야 합니다.
var promise = $.ajax({ url: "/myServerScript" }); promise.done(mySuccessFunction); promise.fail(myErrorFunction); var promise = $.ajax({ url: "/myServerScript" }); promise.then(mySuccessFunction,myErrorFunction);
Promise를 사용하면 다음과 같은 이점이 있습니다.
done() 및 failure() 함수를 여러 번 호출하고 다양한 콜백 함수를 사용할 수 있습니다. 애니메이션을 중지하는 콜백 함수, 새 AJAX 요청을 시작하는 콜백 함수, 수신된 데이터를 사용자에게 표시하는 콜백 함수가 있을 수 있습니다.
var promise = $.ajax({ url: "/myServerScript" }); promise.done(myStopAnimationFunction); promise.done(myOtherAjaxFunction); promise.done(myShowInfoFunction); promise.fail(myErrorFunction);
AJAX 호출이 완료된 후에도 done(), failure() 함수를 계속 호출할 수 있으며, 콜백 함수를 즉시 실행할 수 있습니다. 서로 다른 상태 사이에 변수의 혼동이 없습니다. AJAX 호출이 종료되면 성공 또는 실패 상태를 유지하며 이 상태는 변경되지 않습니다.
Promise를 병합할 수 있습니다. 때때로 두 개의 AJAX 요청을 동시에 수행해야 하고 두 AJAX 요청이 모두 성공할 때 함수를 호출하려는 경우가 있습니다. 이 작업을 수행하려면 새로운 $.when() 함수를 사용해야 합니다.
var promise1 = $.ajax("/myServerScript1"); var promise2 = $.ajax("/myServerScript2"); $.when(promise1, promise2).done(function(xhrObject1, xhrObject2) { // 处理两个XHR对象 });
연기
간단히 말하면 지연 객체는 jQuery의 콜백 함수 솔루션입니다. 영어로 defer는 "지연"을 의미하므로 deferred 객체의 의미는 미래의 특정 시점까지 실행을 "지연"하는 것입니다.
지연된 객체는 promise 객체와 동일한 작업을 수행할 수 있지만 done() 및 failure() 함수를 트리거하는 두 가지 함수가 있습니다.
연기된 객체에는 성공적인 결과를 처리하고 done()과 관련된 함수를 실행하는 해결() 함수가 있습니다. 거절() 함수는 실패한 결과를 처리하고 실패()와 관련된 함수를 실행하는 데 사용됩니다.
Resolve() 및 Reject() 함수 모두에 매개변수를 제공하면 둘 다 done() 및 실패()와 관련된 콜백 함수에 전달됩니다.
요약
jQuery의 ajax는 done()이 포함된 promise 객체를 반환하는 것이며, deferred는 이 promise 객체를 반환하는 프로세스입니다.