์ด ๊ธ์ Promise์ async์ await ์ ๋ํด์ ๋ค๋ฃจ์์ต๋๋ค.
โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค
๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๋์ ํจํด์ผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ์ฝ๋ฐฑ ํฌ์์ ์ด๋์ ๋ ๋ฒ์ด๋ ์ ์๊ฒ ํด์ค๋ค.
Promise ์์ฑ์ ํจ์๋ ๋น๋๊ธฐ ์์ ์ ์ํํ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ฐ ์ด ์ฝ๋ฐฑํจ์๋ resolve์ reject ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
// Promise ๊ฐ์ฒด์ ์์ฑ
const promise = new Promise((resolve, reject) => {
// ๋น๋๊ธฐ ์์
์ ์ํํ๋ค.
if (/* ๋น๋๊ธฐ ์์
์ํ ์ฑ๊ณต */) {
resolve('result');
}else { /* ๋น๋๊ธฐ ์์
์ํ ์คํจ */
reject('failure reason');
}
});
Promise ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณต(fulfilled)ํ์๋์ง ๋๋ ์คํจ(rejected)ํ์๋์ง ๋ฑ์ ์ํ ์ ๋ณด๋ฅผ ๊ฐ๋๋ค.
Promise ๊ฐ์ฒด๋ ์ํ์ ์ ๋ท๋ผ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฒด์ด๋ ๋ฐฉ์
์ผ๋ก ํธ์ถํ๋ค.
then
then ๋ฉ์๋๋ ๋ ๊ฐ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ์ฝ๋ฐฑ ํจ์๋ ์ฑ๊ณต(resolve ํจ์๊ฐ ํธ์ถ๋ ์ํ) ์ ํธ์ถ๋๊ณ ๋ ๋ฒ์งธ ํจ์๋ ์คํจ(reject ํจ์๊ฐ ํธ์ถ๋ ์ํ) ํธ์ถ๋๋ค.
then ๋ฉ์๋๋ Promise๋ฅผ ๋ฐํํ๋ค.
catch
์์ธ(๋น๋๊ธฐ ์ฒ๋ฆฌ์์ ๋ฐ์ํ ์๋ฌ์ then ๋ฉ์๋์์ ๋ฐ์ํ ์๋ฌ)๊ฐ ๋ฐ์ํ๋ฉด ํธ์ถ๋๋ค.
catch ๋ฉ์๋๋ Promise๋ฅผ ๋ฐํํ๋ค.
promiseWork()
.then(result => {
return promiseNextWork(result)
}).then(result => {
return promiseNextWork(result)
}).then(result => {
return promiseNextWork(result)
}).catch(e => {
alert('์๋ฌ๊ฐ ๋ฐ์ํ์ด์~')
}).finally(() => {
alert('์์
์ด ๋๋จ)
})
ํ๋ก๋ฏธ์ค๋ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋๋ ์ฒด์ด๋
ํ์ฌ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๋ฏธ์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ก์จ ์ฝ๋ฐฑ ํฌ์ ํด๊ฒฐํ๋ค.
Promise์ ์ฐ๊ด์ด ๊น๋ค. Promise๊ฐ ์ฝ๋ฐฑ ๊น์ด๋ฅผ 1๋จ๊ณ๋ก ์ค์ฌ์ฃผ๊ธฐ๋ ํ์ง๋ง ์ฌ์ ํ ๋ถํธํ ๊ฒ์ ์ฌ์ค์ด๋ค.
์ฌ๊ธฐ์ async
์ await
๋ฅผ ์ด์ฉํ๋ฉด Promise๋ฅผ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ๋ณด์ด๊ฒ ํ ์ ์๋ค.(์คํ์ ๋น๋๊ธฐ๋ก ๋จ!)
async์ await ์์
const init = async () => {
const data = await request("https://www.waterglasses.codes/${id}");
this.setState({
...this.state,
todos: data,
});
};
๋ฆฌ์กํธ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ async/await๋ฅผ ์ฌ์ฉํ๋ฉด์๋ promise๊ฐ ๋ฌด์์ธ์ง ๋ชจ๋ฅด๋ ์ํ๋ก ๊ตฌํํด์์๋ค. ์ค๋ ๋ฐฐ์ฐ๋ฉด์ ์~ ์ด๊ฒ ํ๋ก๋ฏธ์ค ์๊ตฌ๋
ํ๊ณ ๊นจ๋ฌ์๋ค.๐ฅ ์ ๊ทธ๋๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ก ๋ฏธ๋ฆฌ ํ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ต๊ด์ ์์ด์ ๋คํ์ด๋ค.
์ด๋ฒคํธ ๋ฃจํ, ์คํ ์ปจํ
์คํธ์ ๋ํด์ ํ๋ฒ ๊น์ด ํ๋ด์ผ๊ฒ ๋ค.
๊ณผ์ ๋ฅผ ์์ํด์ผ ํ๋๋ฐ.. ์คํฐ๋๋ ์๊ณ ์๊พธ ๋ฏธ๋ฃจ๊ฒ ๋๋ค. ๋ด์ผ์ ๊ผญ ์์ํ์!
์ ๋ ์ผ๋ก ์ ๋ผ๋ฉด์ ๋จน์๋๋ฐ ๋๋ฌด ๋งค์ ๋ค.. ๐ฅต
๋ชธ์ ์ข ๊ด์ฐฎ์ผ์ ๊ฐ์?!?! ์ด์ ์ด์ด ๋๊ฒ ์ค๋ฅด์ จ๋๊ฑฐ ๊ฐ์๋ฐ...
์ ๋ ๋ฆฌ์กํธ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ๋, async/await ๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ ๋ชจ๋ฅด๊ณ ๊ฐ๋ฐํ์๋๋ฐ,
์ด์ ๊ฐ๋ ์ ๋ํด์ ์๋๊น ๊ทธ๋์ ๋์๋ ์๋ง์ ์ค๋ฅ์ ๋ํ ํด๋ต์ด ๋์ค๋ค์...
ํด๊ฒฐํด์ผ ํ ์ผ์ด ๋ง์ง๋ง, ์ ์ฑ๊ฒจ์ ๋ ๋ง๋ฆฌ ํ ๋ผ๋ฅผ ์ก์๋ด ์๋ค!
๊ฑด๊ฐ ์กฐ์ฌํ์ธ์!! ํ์ดํ ~