Promise

๋น„๋™๊ธฐ์ฒ˜๋ฆฌ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

continuation passing style - ํ•จ์ˆ˜๋ฅผ ์ง€์†์ ์œผ๋กœ ๋„˜๊ฒจ์ค€๋‹ค.

function foo (a, b, c, callback) {
  // ...
  // compete : callback();
}

// foo -> bar -> baz
// ์ง€์†์ ์œผ๋กœ ์ฝœ๋ฐฑ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
// callbackhell.com

new Promise => ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋„์™€์ค€๋‹ค.

๊ฐ์ฒด๋ผ๋Š”๊ฒŒ ๋งŒ๋“ค์–ด ์กŒ๋‹ค. ์†์— ์ฅ˜ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์ด ๋งŒ๋“ค์–ด ์กŒ๋‹ค. ๋ถ€ํƒ์„ ํ•˜๊ณ  ์‹ค๋ฌผ๋กœ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์ ‘๋ชฉํ•˜์—ฌ ๋น„๋™๊ธฐ๋ฅผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€๋‹ค.

์›๋ž˜๋Š” ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๊ณ  ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ ์ž์œ ๋„๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ๋Šฅ๋™์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ™œ์šฉ์„ฑ์ด ํ›จ์”ฌ ์ปค์กŒ๋‹ค.

peomise๋ฅผ ์จ๋„ callbackhell์ด ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— promise๊ฐ€ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค. ํ•˜๋Š”๊ฑด ์ž˜๋ชป๋œ๊ฑฐ๋‹ค.

๊ฒฐ๊ณผ๊ฐ’์„ ๋ชจ์•„์„œ ๊ณตํ†ต์ž ๋Š”..

๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ฌ..

var youtubePromise = new Promise(function (resolve, reject) { //new Promise ์˜ค๋ธŒ์ ํŠธ๋‹ค.
  $.get({ 
    url: SOME_URL,
    success: function (data) {
      resolve(data);
    },
    error: function (error) {
      reject(error);
    }
  });
});

youtubePromise.then(function (data) {
  console.log('Success:', data.items.length);
}).catch(function (error) {
  console.error('Error:', error);
});
  • new Promise๋Š” ์ธ์ž๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • ๊ทธ ํ•จ์ˆ˜์—๋Š” resolve์™€ reject๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค.

  • ์ด ๋‘๊ฐœ๋Š” Promise์ธก์—์„œ ์ž๋™์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

  • new Promise์˜ ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ํ•œ๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด resolve์™€ reject๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

  • ์„ฑ๊ณตํ•˜๋ฉด์€ resolve๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹คํŒจํ•˜๋ฉด reject๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  • var youtubePromise๊ทธ๋ž˜์„œ ์ด ๋ณ€์ˆ˜์—๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค.

youtubePromise.then(function (data) {
  console.log('Success:', data.items.length);
}).catch(function (error) {
  console.error('Error:', error);
});
  • new Promise์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

  • ์ธ์Šคํ„ด์Šค์—๋Š” then์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ์™€ catch๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋‹ค.

  • then๊ณผ catch๋Š” ์ธ์ž๋กœ function์„ ๋ฐ›๋Š”๋‹ค.

  • then์˜ ์ธ์ž๋กœ ๋ฐ›์€ ํ•จ์ˆ˜๋Š” resolve๋์„ ๋•Œ ์‹คํ–‰๋œ๋‹ค.

  • catch๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋Š” reject๋์„ ๋•Œ ์‹คํ–‰๋œ๋‹ค.

  • then์˜ ์ธ์ž์ธ ํ•จ์ˆ˜์•ˆ์— data๋ผ๋Š” ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ทธ ์ธ์ž๋Š” successํ–ˆ์„ ๋•Œ ๋ฐ›๋Š”๋‹ค.

  • rejectํ–ˆ์„ ๋•Œ ๋ฐ›๋Š” error์ธ์ž๋Š” catch๋กœ ์ „๋‹ฌ ๋œ๋‹ค.

Last updated

Was this helpful?