수색…


소개

jQuery의 약속은 비동기 작업을 빌딩 블록 방식으로 연결하는 영리한 방법입니다. 이렇게하면 쉽게 재구성 할 수없는 콜백의 오래된 학교 중첩을 대체합니다.

기본 약속 작성

다음은 "주어진 시간이 경과 할 때 진행 하겠다고 약속 하는"함수의 아주 간단한 예입니다. 그것은 새로운 Deferred 객체를 생성하여 나중에 해결되며 Deferred의 약속을 반환합니다 :

function waitPromise(milliseconds){

   // Create a new Deferred object using the jQuery static method
   var def = $.Deferred();

   // Do some asynchronous work - in this case a simple timer 
   setTimeout(function(){

       // Work completed... resolve the deferred, so it's promise will proceed
       def.resolve();
   }, milliseconds);

   // Immediately return a "promise to proceed when the wait time ends"
   return def.promise();
}

그리고 다음과 같이 사용하십시오 :

waitPromise(2000).then(function(){
     console.log("I have waited long enough");
});

비동기 약속 체인

하나씩 다른 비동기 작업을 수행해야하는 경우 약속 개체를 함께 연결해야합니다. 다음은 간단한 예입니다.

function First() {
    console.log("Calling Function First");
    return $.get("/ajax/GetFunction/First");
}

function Second() {
    console.log("Calling Function Second");
    return $.get("/ajax/GetFunction/Second");
}
 
function Third() {
    console.log("Calling Function Third");
    return $.get("/ajax/GetFunction/Third");
}

function log(results){
    console.log("Result from previous AJAX call: " + results.data);
}
 
First().done(log)
       .then(Second).done(log)
       .then(Third).done(log);

jQuery ajax () 성공, 오류 VS .done (), .fail ()

success and Error : Ajax 요청이 성공적으로 완료 될 때 호출되는 성공 콜백.

요청하는 동안 오류가 발생할 경우 호출되는 실패 콜백입니다.

예:

 $.ajax({
        url: 'URL',
        type: 'POST',
        data: yourData,
        datatype: 'json',
        success: function (data) { successFunction(data); },
        error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
    });

.done () 및 .fail () :

.ajax (). done (function (data, textStatus, jqXHR) {}); jQuery 1.8에서 더 이상 사용되지 않는 .success () 메서드를 대체합니다. 위의 success 콜백 함수의 대체 구문입니다.

.ajax (). fail (function (jqXHR, textStatus, errorThrown) {}); jQuery 1.8에서 더 이상 사용되지 않는 method .error ()를 대체합니다. 이것은 위의 전체 콜백 함수에 대한 대체 구성입니다.

예:

$.ajax({
    url: 'URL',
    type: 'POST',
    data: yourData,
    datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });

약속의 현재 상태 가져 오기

기본적으로 약속 상태는 생성 될 때 보류 중입니다. 약속의 상태는 약속을 만든 연기 된 객체가 그것을 해결하거나 거절 할 때 변경됩니다.

var deferred = new $.Deferred();
var d1= deferred.promise({
    prop: "value"
});
var d2= $("div").promise();
var d3= $("div").hide(1000).promise();

console.log(d1.state()); // "pending"
console.log(d2.state()); // "resolved"
console.log(d3.state()); // "pending"


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow