-
[JS] ์ค์ต - ํ์ด๋จธ APIcodeStates 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'
๋ฐ์ํ'codeStates front-end > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] chapter21. ๋น๋๊ธฐ3 - fetch API (0) 2023.01.19 [JS] chapter20. ๋น๋๊ธฐ2 - node.js (0) 2023.01.19 [JS] chapter19. ๋น๋๊ธฐ1 - java script (0) 2023.01.17 [JS] ์์๋๋ฉด ์ธ๋ชจ์๋ ์ ๋นํ JS์ฉ์ด์ฌ์ (0) 2023.01.17 [JS] ์ค์ต - Beesbeesbees (0) 2023.01.16