ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] ์‹ค์Šต - ํƒ€์ด๋จธ API
    codeStates front-end/Java Script 2023. 1. 18. 11:07
    ๋ฐ˜์‘ํ˜•

     

     

     

     

     

     

    ๐Ÿ“Œ ํƒ€์ด๋จธ API

     

     

     

    ๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

     

    • ๊ฐ ํ•จ์ˆ˜๋“ค์„ ์‹คํ–‰ํ•ด๋ณด๊ณ  ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ธ์ง€ ์ฃผ์„ ๋‹ฌ๊ธฐ
    • delayํ•จ์ˆ˜์™€ sleepํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์„ ํ™•์ธ
    • ๋‹ค์Œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์•„๋ณด๊ธฐ

     

     

    • callback ๋ฒ„ํŠผ์€ runCallback ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • promise ๋ฒ„ํŠผ์€ runPromise ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • async & await ๋ฒ„ํŠผ์€ runAsync ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

     

     

    ๐Ÿ“ delayํ•จ์ˆ˜์™€ sleepํ•จ์ˆ˜์˜ ์ฐจ์ด์ 

     

    callback.js

    const delay = (wait, callback) => {
      setTimeout(callback, wait);
    }

     

    promiseConstructor.js

    const sleep = (wait) => {
      return new Promise((resolve) => {
        setTimeout(resolve, wait);
      });
    }

     

    delay ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ setTimeout์„ ์‹คํ–‰ํ•˜๊ณ ,

    sleeํ•จ์ˆ˜๋Š” Promise๋ฅผ ์‚ฌ์šฉํ•ด์„œ setTimeout์„ ์‹คํ–‰ํ•œ๋‹ค.

     

     

    ๐Ÿ“๊ฐ ํ•จ์ˆ˜๋“ค์„ ์‹คํ–‰ํ•ด๋ณด๊ณ  ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ธ์ง€ ์ฃผ์„ ๋‹ฌ๊ธฐ

     

    runCallback ํ•จ์ˆ˜

     

    function runCallback() {
      resetTitle(); // ์ œ๋ชฉ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜
      playVideo(); // ์˜์ƒ์„ ์žฌ์ƒํ•˜๋Š” ํ•จ์ˆ˜
    
      delay(1000, () => {
        pauseVideo(); // ์˜์ƒ์„ ๋ฉˆ์ถ”๋Š” ํ•จ์ˆ˜
        displayTitle(); // ์ œ๋ชฉ์„ ํ‘œ์‹œํ•˜๋Š” ํ•จ์ˆ˜
    
        delay(500, () => { // ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ delay ํ•จ์ˆ˜ ํ˜ธ์ถœ
          highlightTitle(); // ์ œ๋ชฉ์„ ๊ฐ•์กฐํ•˜๋Š” ํ•จ์ˆ˜
    
          delay(2000, resetTitle); // ์ œ๋ชฉ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ํ•จ์ˆ˜
        });
      });
    }

     

    runPromise ํ•จ์ˆ˜

     

    function runPromise() {
      resetTitle();
      playVideo();
    
      sleep(1000).then(() => { // promise ์‚ฌ์šฉํ•ด์„œ sleep ํ•จ์ˆ˜ ์‚ฌ์šฉ
        pauseVideo();
        displayTitle();
      })
        .then(sleep.bind(null, 500)) // then ํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์„œ sleepํ•จ์ˆ˜ ํ˜ธ์ถœ
        .then(highlightTitle)
        .then(sleep.bind(null, 2000))
        .then(resetTitle)
    }

     

    runAsync ํ•จ์ˆ˜

     

    async function runAsync() { // ํ•จ์ˆ˜ ์•ˆ์— async ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  async ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ
      resetTitle();
      playVideo();
    
      await sleep(1000); 
      pauseVideo();
      displayTitle();
    
      await sleep(500);
      highlightTitle();
    
      await sleep(2000);
      resetTitle();
    }

     

     

    ๐Ÿ“๋‹ค์Œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์•„๋ณด๊ธฐ

     

    ๐Ÿง Promise ์‹คํ–‰ ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ resolve ์™€ reject ๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ resolve : ๊ธฐ๋Šฅ์„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์„œ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•จ
          reject : ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ค‘๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด, ํ˜ธ์ถœํ•˜๊ฒŒ ๋จ

     

    ๐Ÿง resolve, rejectํ•จ์ˆ˜์—๋Š” ์ „๋‹ฌ์ธ์ž๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋„˜๊ธฐ๋Š” ์ „๋‹ฌ์ธ์ž๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ ์‹ค์Šตํ•ด๋ณด๊ธฐ

     

    promiseConstructor.js

     

    const sleep = (wait) => {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve('hello');
        }, wait);
      });
    };

     

    runPromise ํ•จ์ˆ˜

     

    function runPromise() {
      resetTitle();
      playVideo();
    
      sleep(1000)
        .then((param) => {
          console.log(param);
          pauseVideo();
          displayTitle();
          return "world";
        })
        .then((param) => {
          console.log(param);
          return sleep(5000);
        })
        .then(highlightTitle)
        .then(sleep.bind(null, 2000))
        .then(resetTitle);
    }

     

     

    ์‹คํ–‰๊ฒฐ๊ณผ

     

    ์˜์ƒ์ด ๋ฉˆ์ถ”๋ฉด์„œ world ์ถœ๋ ฅ

     

     

    ๐Ÿง new Promise()๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ Promise ์ธ์Šคํ„ด์Šค์—๋Š” ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋‚˜์š”? ๊ฐ๊ฐ์€ ์–ด๋–ค ์šฉ๋„์ธ๊ฐ€์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ

    all: ƒ all() -> ๋ฐฐ์—ด์•ˆ์— ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ๊ฐ ์š”์†Œ๋กœ ๋„ฃ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    catch: ƒ catch() -> ์˜ค๋ฅ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์˜ค๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•ด์คŒ
    constructor: ƒ Promise() -> Promise ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    finally: ƒ finally() -> ์„ฑ๊ณต ์‹คํŒจ ์—ฌ๋ถ€ ์ƒ๊ด€์—†์ด ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‹คํ–‰
    then: ƒ then() -> resolve๋‚˜ reject์˜ ์ธ์ž๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค. ์ฝœ๋ฐฑํ•จ์ˆ˜ ์‹คํ–‰

     

    ๐Ÿง Promise์˜ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋‚˜์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ

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

    new Promise() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋Œ€๊ธฐ(Pending)์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

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

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

     

    ๐Ÿง await ํ‚ค์›Œ๋“œ ๋‹ค์Œ์— ๋“ฑ์žฅํ•˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰์€ ์–ด๋–ค ํƒ€์ž…์„ ๋ฆฌํ„ดํ•  ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋‚˜์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ await์€ Promise๊ฐ€ fulfill๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€, ํ•ด๋‹น ๊ฐ’์„ ๋ฆฌํ„ด

     

    ๐Ÿง await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์–ด๋–ค ๊ฐ’์ด ๋ฆฌํ„ด๋˜๋‚˜์š”?

     

    ๐Ÿง‘‍๐Ÿ’ผ ์‹ค์Šตํ•ด๋ณด๊ธฐ

     

    promiseConstructor.js

     

    resolve๋กœ ์ „๋‹ฌํ•œ ๊ฐ’์ด ๋ฆฌํ„ด๋˜์–ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ๋‹ค.

     

    const sleep = (wait) => {
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve("hello");
        }, wait);
      });
    };
    
    let returnValue = await sleep(1000); // ๊ฐœ๋ฐœ์ž๋„๊ตฌ์— ๋„ฃ์–ด๋ณด๊ณ  ๊ฐ’ ํ™•์ธ
    returnValue // outPut -> 'hello'

     

     

     

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.