Achievement Goals
๐ synchronous / asynchronous
๐ Promise ์ฌ์ฉ ํจํด์ ์ดํดํ ์ ์๋ค.
-resolve, reject์ ์๋ฏธ์, then, catch์์ ๊ด๊ณ๋ฅผ ์ดํดํ ์ ์๋ค.
-Promise์์ ์ธ์๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
-Promise์ ์ธ๊ฐ์ง ์ํ๋ฅผ ์ดํดํ ์ ์๋ค.
-Promise.all ์ ์ฌ์ฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
๐ async/await keyword์ ๋ํด ์ดํดํ๊ณ , ์๋ ์๋ฆฌ๋ฅผ ์ดํดํ ์ ์๋ค.
์ปดํจํฐ์์์ ๋๊ธฐ์ ๋ฐฉ์์ด๋, ์ด๋ ํ ๋์์ด ๋๋ ๋๊น์ง ๋ค์๋์์ ์์ํ์ง ๋ชปํ๊ณ ๋๊ธฐ์ํ์ ์์ด์ผ ํ๋ค.
๋๋ถ๋ถ์ ์น/์ฑ ์๋ฒ๋ ๋น๋๊ธฐ์ ๋ฐฉ์์ ๋ฐ๋ฅด๋๋ฐ, ์ด๋ ํ ๋์์ด ๋๋์ง ์๋๋ผ๋ ๋ค์์๋ ๋์์ ์์์ ์์์ ํ๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด, ์ด๋ ํ ์์์ ์์ฒญํ ๋ ๋ก๋ฉ์๋๊ฐ ๋๋ ค์ง๋ค๊ณ ํด์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์๋ ๊ฒ๋ค์ ํด๋ฆญํ์ง ๋ชปํ๋ ๊ฒ์ ์๋๋ค. ๋์์์ด ๋ก๋ฉ์ค์ ์์ด๋ ๋ค๋ฅธ ์์์ ํด๋ฆญํ๊ฑฐ๋, ๋ค๋ฅธ ์ฌ์ดํธ๋ก ๊ฐ ์ ์๋๊ฒ. ์ด ๋ชจ๋ ๊ฒ์ด ๋น๋๊ธฐ์ ์ผ๋ก ์์ง์ด๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฌ์ค ํ๋ก๋ฏธ์ค๋ฅผ ํ๊ธฐ ์ ์, ์ฝ๋ฐฑ์ ๊ฐ๋
์ ๋จผ์ ์์์ผ ํ๋๋ฐ
์ฝ๋ฐฑ์ ๊ทธ๋์ ํจ์์์ ์์ฃผ ๋ค๋ค๋ ๊ฐ๋
์ด๋ค. ๊ณ์์ ์ผ๋ก ๋ค๋ฅธ ํจ์๋ฅผ ๋ถ๋ฌ๋ด๋ ์ฝ๋ฐฑ์ผ๋ก ๋น๋๊ธฐ๋ฅผ ํํํด๋ ๋์ง๋ง, ๋ถ๋ฌ์ฌ ํจ์๊ฐ ๋ง์์ง ๊ฒฝ์ฐ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ฉฐ "์ฝ๋ฐฑ์ง์ฅ" ์ด๋ผ๋ ๊ฒ์ ๊ฒฝํํ ์ง๋ ๋ชจ๋ฅธ๋ค.
promise ๋ ์ด ์ฝ๋ฐฑ์ง์ฅ์ ๋ฒ์ด๋ ์ข ๋ ๊ฐ๋
์ฑ ์๊ฒ ๋ง๋ค์ด ์ค๋ค.
ํจ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ promise๋ ํด๋์ค์ฒ๋ผ new ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ๋ค.
new Promise((resolve,reject)=>{~~})
๋ง์ฝ ์ด๋ ํ ๋ฐ์ดํฐ๋ ์๋ฒ๋ฅผ ๋ฐ์ ์ฌ ๋, ๊ทธ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์์ค๋ฉด resolve์ ์๋ ๋์์ด ์คํ๋๊ฒ ๋๋ค.
๋ฐ๋๋ก ๋ฐ์ดํฐ ๋ฐ๋๋ฐ ์คํจ๋ฅผ ํ๋ค๋ฉด reject ์ ์๋ err ๊ฐ ๋์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋๋ ๋จธ๋ฆฌ๊ฐ ๋๋น ์ ,,
resolve - then ์ง๊ฟ, reject - catch ์ง๊ฟ ์ด๋ ๊ฒ ์ธ์๋ฒ๋ ธ๋ค.
new Promise()๋ก ํ๋ก๋ฏธ์ค๋ฅผ ์์ฑํ๊ณ ์ข ๋ฃ๋ ๋๊น์ง 3๊ฐ์ง ์ํ๋ฅผ ๊ฐ๋๋ค.
Pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
Fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ
Rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
์์ ๊ทธ๋ฆผ์ resolve, reject ์์ด Promise ๋ฅผ ์ฌ์ฉํ ์์๋ค.
๋ก์ง์๋ฃ๊ฐ ๋ ๋ ์ฒ๋ฆฌ๊ฐ ๋์ด ์ด๋ผ๊ณ ์จ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
function myPromise(){
return new Promise((resolve,reject)=>{
setTimeout((
resolve('๐
')
),2000)
})
}
resolve, reject ๋ฅผ ์ผ์ ๊ฒฝ์ฐ status ๋ fulfilled ๋ก ๋์ค๋ฉฐ, ์ด ํํ๋ฅผ ์ ์์ ์ธ ํํ๋ผ๊ณ ๋ณผ ์ ์๋ค.
function myPromise(str){
return new Promise((resolve,reject)=>{
setTimeout(() => {
console.log(str)
resolve()
}, Math.floor(Math.random()*100)+1
)
})
}
const resultFace = () =>{
myPromise('๐')
.then(()=>{myPromise('๐๐ผ')})
.then(()=>{myPromise('๐')})
}
str ์ด๋ผ๋ ์ธ์๋ฅผ ๊ฐ๋ myPromise ํจ์๋ฅผ ์์ฑํ๋ค.
์ด ํจ์์์ ํ๋ก๋ฏธ์ค๋ฅผ ์์ฑํ์ฌ ์๊ฐ์ด ๋๋ค์ธ ms ๋ฅผ ์์ฑ.
ํ๋ก๋ฏธ์ค๋ก ๋ง๋ค์์ผ๋ ์ ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ ๋์ํ๋ ํจ์๋ ์์ฑํด์ค์ผ ํ๋ค.
resultFace ๋ผ๋ ,, ๋ญ๊ฐ ์ด๊ฐ์ด ์ด์ํ์ง๋งใ
ใ
ใ
์ฌํผ ์ด ํจ์์์ myPromise ํจ์๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ธ์๋ก ๋ด๊ฐ ๋ฃ๊ณ ์ถ์ ๋ฌธ์์ด์ ์์ฑํ๋ฉด ๋๋ค.
์ด๋์ ๋ด์ผ๊ตด? ใ
ใ
ใ
ใ
ํ์ง๋ง ์ฝ๋ฐฑ์ง์ฅ์ ๋ฒ์ด๋ promise ๋ ํจ์๊ฐ ๋ง์์ ธ, ์๋ชป ์ฌ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค ์ง์ฅ์ ๋ง๋ณผ ์ ์๋ค.
๊ทธ๋ Promise Chaining ์ ์์ผ์ฃผ๋ฉด ๋ณด๋ค ๋ ๊น๋ํ๊ฒ ๋ณผ ์ ์๋ค.
let result = [];
return prom1
.then(data => {
result.push(JSON.parse(data))
return prom2
})
.then(data =>{
result.push(JSON.parse(data))
return prom3;
})
.then(data =>{
result.push(JSON.parse(data))
return prom4;
})
.then(data =>{
result.push(JSON.parse(data))
return result;
})
๊ทธ๋๋ ๋ณต์กํด๋ณด์ธ๋ค๊ณ ?
๊ทธ๋ด๋ ๋น๋๊ธฐ ์คํ ํ ํจ์๋ฅผ ์ธ์๋ก ๋ชจ๋ ๋ฌถ์ด์ฃผ๋, Promise.all ์จ๋ณด์!
Promise.all ์ ๋ฐฐ์ดํํ์ ์ธ์, ์ํ ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ์จ๋ค.
์ ๊ธฐํ ์ ์ (์ฌ์ค ๋๋ง ์ ๊ธฐํ๋ฏ.)
-์ถ์ฒ : ๋ชจ๋์ ๊ฐ mdn ,,
mdn ์์ Promise.all์ ์ธ์์ ํจ์์ด๋ฆ์ ๋
๋
๋
๋ฃ๊ณ ๋ง์ง๋ง์ .then ์ ๋ฃ์ด์ฃผ์ด ๊ธฐ์กด์ ์๋ ํจ์์ด๋ฆ๋ง ๋ฃ์ด์ฃผ๋ฉด ๋๋ ์ค ์์๋๋ฐ ์ธ์ ์์์๋ then ์ ์ธ ์ ์๋ค!!
const readAllUsers = () => {
const prom1 = getDataFromFilePromise(user1Path);
const prom2 = getDataFromFilePromise(user2Path);
return Promise.all([
prom1.then(data=>JSON.parse(data)),
prom2.then(data=>JSON.parse(data))
])
.then((data)=>{
return data;
})
}
๋๋
const readAllUsers = () => {
const prom1 = getDataFromFilePromise(user1Path);
const prom2 = getDataFromFilePromise(user2Path);
return Promise.all([prom1,prom2])
.then(([data1,data2])=>{
return `[${data1},${data2}]`
})
.then((data)=>{
return JSON.parse(data);
})
}
๋จ, promise.all ์ ์ธ์๋ก ๋ค์ด์จ ๋น๋๊ธฐ ํจ์ ์ค ํ๋๋ผ๋ reject ๋๋ฉด ๋๋จธ์ง๋ ๋ค ์คํํ์ง ์๋๋ค.
hoxy ,, promise ๋ ๋์ ์๋ค์ด์ค์ ๋ค๊ณ ์ง?
๊ทธ๋ ๋ค๋ฉด async ๋ฅผ ๊ณ ๋ คํด๋ด๋ ์ข๋ค.
๋ฌด์กฐ๊ฑด async ๋ฅผ ์ฐ๋๊ฒ์ด ์ข์๊ฒ์ ์๋๋ผ๊ณ ํ๋ ์์ง ์ ํํ ์ฐจ์ด๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๋ ๊ณต๋ถํด๋ด์ผ์ง ,,
async function myAsync(){
return await ๋น๋๊ธฐํจ์๋ช
.then(~~)
}
๋๋
const myAsync = async () =>{
return await ๋น๋๊ธฐ ํจ์๋ช
.then(~)
}
async ๋ await ์ ๊ฐ์ด ์ฐ์ด๋ ํ ์ธํธ๋ก ๋ณด๋ฉด ๋๋ค.
์์ฌ์งใ
.. ์กธ๋ฆฝ๋ค.
์ด๋ง ์๋ฌ๊ฐ๊ฒ์ ํ๋ฆฌ๋ฆญ~