ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • promise, done 사용 예제
    JavaScript 2019. 2. 6. 15:47
    반응형

     

     

    -Done

    #done 실제로 $.ajax() 의해 반환  jqXHR 개체의 일부이며, jQuery 1.8에서 success 대체한다.

     

     

    #done은 ajax 함수에서 성공 콜백 함수를 분리하여 나중에 수정하지 않고 자신의 핸들러를 추가 있다.

    #기존의 ajax의 done => success, fail => error 및 always => complete의 동등성을 매핑

    #then, done의 차이.. (호출 체인 (chaining), done  함수체이닝 가능, ex)done().done().done() 가능   then 생성하지 않음)

     

    예제)

     

    // set success action before making the request 

    $.ajax({ 

        url: 'url.do', 

        success: function(){ 

        alert('AJAX successful'); 

        } 

    }); 

    // set success action just after starting the request 

    var jqxhr = $.ajax("url.do") .done(function() { alert("success"); }); 

     

    jQuery.ajax()  jQuery XMLhttpRequest(jqXHR)  반환하기 때문에 아래와 같은 방식으로도 구현이 가능

    var jqxhr = $.ajax({   url: "/test/ajax.do" });    

    jqxhr.done(successFunction); 

    jqxhr.done(successFunction1); 

    jqxhr.fail(errorFunction); 

    jqxhr.always(alwaysFn);

     
     

     

    -Promise

     

    #Promise는 IE11 안먹힘..

    #Promise 자바스크립트 비동기 처리에 사용되는 객체다

    여기서 자바스크립트의 비동 처리란특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 자바스크립트의 특성 의미

    #프로미스의 3가지 상태(states)

    프로미스를 사용할 알아야 하는 가장 기본적인 개념이 바로 프로미스의 상태(states)다. 

    여기서 말하는 상태란 프로미스의 처리 과정을 의미한다. new Promise() 프로미스를 생성하고 종료될 때까지 3가지 상태를 갖는다.

     

    • Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태
    • Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태
    • Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태

     

    여러가지 정의 방법

     

    1. 첫번째

     

    new Promise(function(resolve, reject){

      setTimeout(function() {

        resolve(1); //resolve은 성공, reject 실패 

      }, 2000);

    })

    .then(function(result) {

      console.log(result); // 1

      return result + 10;

    })

    .then(function(result) {

      console.log(result); // 11

      return result + 20;

    })

    .then(function(result) {

      console.log(result); // 31

    });

     

    2. 두번째

    var _promise = function (param) {

     

    return new Promise(function (resolve, reject) {

    // 비동기를 표현하기 위해 setTimeout 함수를 사용 

    window.setTimeout(function () {

     

    // 파라메터가 참이면, 

    if (param) {

    // 해결됨 

        resolve("해결 완료");

    }else{// 파라메터가 거짓이면,

    // 실패 

    reject(Error("실패!!"));

    }

    }, 3000);

    });

    };

     

    //Promise 실행

    _promise(true)

    then(function(text) {

    // 성공시

    console.log(text);

    }, function (error) {

    // 실패시 

    console.error(error);

     

    }); 

     

    3. 세번째

     

    jQuery 1.5 버전 이후부터는 아래와 같이 done(), fail(), always()  이용하여 결과에 대한 처리를 지정한다.

     

    var successFunction = function(data){

    console.log('성공 콜백함수 실행 첫번째');

    }    

    var successFunction1 = function(data){

    console.log('성공 콜백함수 실행 두번째');

     

    }

    var errorFunction = function(request, status, error) {

    console.log('실패일때 실행');

     

    }

     

    var alwaysFn = function(){

    console.log('언제나 실행');

     

    } 

     

    var promise = $.ajax({   url: '/test/ajax.do' });    

    promise.then(successFunction).then(successFunction1).then(errorFunction);

     

     

    4. 네번째

    let promise = new Promise((resolve, reject) => {

    setTimeout( () => {

     

    resolve(); //then 실행됨

       //reject(); .catch( 실행됨

    },3000 );  //비동기 실행 연출을 위한 셋타임아웃 3초

    });  

     

    promise

    .then( () => console.log('1') )

    .then( () => console.log('2') )

    .then( () => console.log('3') )

    .catch( () => console.log('catch') );

    5. 다섯번째

     

    jQuery 1.8 버전 이후부터는 then() 함수를 사용하여 Promise 패턴을 적용할  있다.

     

    then()  첫번째 인자는 성공에 대한 액션두번째 인자에는 실패에 대한 액션을 지정할  있다.

    $.ajax({url: "/ajax.do"}).then([successFunction, successFunction1], [errorFunction errorFunction1]);

     

     

     

    반응형

    댓글

Designed by Tistory.