[Javascript] Promise ์ดํ•ดํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

     

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

     

    Promise - JavaScript | MDN

    Promise ๊ฐ์ฒด๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋งž์ดํ•  ๋ฏธ๋ž˜์˜ ์™„๋ฃŒ ๋˜๋Š” ์‹คํŒจ์™€ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    developer.mozilla.org

     

    1. ๋ชฉ์ 

    - ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ํ•  ๋•Œ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ

    2. ๋‚ด์šฉ

    - ๊ธฐ๋ณธ๊ตฌ์กฐ

    test : function () {
      return new Promise( function(resolve, reject) {
          $.get('request_url', function(data) {
              resolve(data);// ๋ฆฌํ„ด๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ resolve์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ.
          });
      });
    }
    
    test().then( function(data) {
    	console.log(data); // then ์œผ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…
    });

    ์œ„์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋ฉฐ, resolve๋ฅผ ํ†ตํ•ด then ์œผ๋กœ ์ด์–ด์ง€๋Š” ์ดํ›„ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

     

    3. promise ์˜ ์ƒํƒœ

    1. Pending(๋Œ€๊ธฐ) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ

    new Promise();

    - ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ, ์ƒํƒœ.

    2. Fulfilled(์ดํ–‰) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€ ์ƒํƒœ

    return new Promise(function(resolve,reject){
    	resolve();
    });

    - resolve ๋ฅผ ํ˜ธ์ถœํ•œ ์ƒํƒœ.

    3. Rejected(์‹คํŒจ) : ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ

    test: function () {
      return new Promise( function ( resolve, reject ) {
          reject(new Error("error!"));
      });
    }
    
    test().then().catch(function(err) {
      console.log(err); // error!
    });

    ์„œ๋ฒ„ ์š”์ฒญ ์‹คํŒจ ์‹œ, ์—๋Ÿฌ๋ฐœ์ƒ์€ reject ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ catch ๋กœ ๋ฐ›์•„ ํ‘œํ˜„ํ•œ๋‹ค.

     

    4. ์ถ”๊ฐ€ ๋‚ด์šฉ

    - then ์œผ๋กœ ๊ณ„์† ์ด์–ด์„œ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

    test : function () {
    	return new Promise ( function(resolve, reject) {
    		$.get('request_url', function(response) {
    			if (response) {
    				resolve(response);
    			}
    			reject(new Error("error!"));
    		});
        });
    }
    
    test().then( function ( data ) {
    	console.log(data); // 1
        return data + 1; // 2
    }).then ( function ( data ) {
    	console.log(data); // 2
        return data + 1; // 3
    });

     

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€