Skip to content

Latest commit

ย 

History

History
56 lines (41 loc) ยท 1.84 KB

Promise_pattern.md

File metadata and controls

56 lines (41 loc) ยท 1.84 KB

ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด

๋‘๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ํ๋ฆ„์„ ์ œ์–ดํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด a ์™€ b ๋ผ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ๋ชจ๋‘ ์™„๋ฃŒ๋˜๋ฉด c ๋ผ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์ด ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด ํ”„๋กœ๋ฏธ์Šค ํŒจํ„ด์ด๋‹ค.

All ๊ณผ Race

Promise.all([])

๊ด€๋ฌธํŒจํ„ด์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ค„ ๋ชจ๋‘ ์ค€๋น„๊ฐ€ ๋˜๋ฉด ์‹œ์ž‘ํ•œ๋‹ค.

// request๋Š” promise ํŒจํ„ด์˜ ๋น„๋™๊ธฐ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ผ๊ณ  ๊ฐ€์ •
var p1 = request('https://');
var p2 = request('https://');

Promise.all([p1, p2])
  .then(function(value) {
    return request('http://');
  })
  .then(function(msg) {
    console.log(msg);
  });

์ด ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ’์€ promise, thenable, ์ฆ‰์‹œ๊ฐ’ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ˜„์žฌ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ›„ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. ๋‹ค๋งŒ ์–ด๋– ํ•œ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋„ ์ƒ๊ด€์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” Promise.resolve()๋กœ ์ •๊ทœํ™”๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๋ฐฐ์—ด์•ˆ์˜ ๊ฐ’์ด ๋ฒ„๋ฆผ์ฒ˜๋ฆฌ๋˜๋ฉด(reject) ๋ชจ๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋ฌดํšจ์ฒ˜๋ฆฌ ๋˜์–ด ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋ถ™์ด๋„๋ก ํ•˜์ž.

Promise.race([])

๊ฑธ์‡  ํ˜น์€ ๊ฒฝํ•ฉ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŒจํ„ด์ด๋‹ค. ๋จผ์ € ์˜จ ๊ฒƒ๋งŒ ์‹คํ–‰๋œ๋‹ค. ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ’์€ ์–ด๋–ค๊ฒƒ์ด ๋“ค์–ด๊ฐ€๋„ ์ƒ๊ด€์—†๋‹ค. ์ฆ‰์‹œ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋„ ๋˜์ง€๋งŒ ์ฆ‰์‹œ๊ฐ’์€ ์ˆœ์„œ๊ฐ€ 1 ์ˆœ์œ„๋ผ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ all ๊ณผ ๋™์ผํ•˜๋‹ค.

ํƒ€์ž„์•„์›ƒ ๊ฒฝํ•ฉ

๊ฒฝํ•ฉ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž„์•„์›ƒ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

function timeoutPromise(time) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      reject('ํƒ€์ž„์•„์›ƒ');
    }, time);
  });
}

Promise.race(foo, timeoutPromise(3000)).then(
  function() {
    //
  },
  function(err) {
    // err
  }
);