์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃจ๋ ์์ ์ ์งํํ๊ฒ ๋์๋๋ฐ, ๊ธฐ์กด์ ํด์ค๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ด๋ฒ์๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ณด๋ด์ url๋ฅผ ๋ฐ์์์ ๋ค์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ํจ๊ป create ํน์ update๋ฅผ ํด์ค์ผํ๋ค. ๊ทธ๋ฐ๋ฐ, ๋ง์ฝ์ ๊ธฐ์กด์ url์ด ์๋ ์ํ๋ฉด pass๋ฅผ ํ๊ณ ์๋ก ๋ฃ์ ์ด๋ฏธ์ง๋ง url์ ๋ค์ ๋ฐ์์์ update๋ฅผ ํด์ค์ผํ๋ ๊ฒ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค.
api๋ฅผ ํธ์ถํ๊ธฐ ์ ์ console.log๋ก body๋ฅผ ์ฐ์ผ๋ฉด ๋ถ๋ช ํ ์ ๋ฐ์ดํธ ๋ ์ด๋ฏธ์ง url์ด ์ฐํ๋๋ฐ, ๋ง์ api๋ฅผ ํธ์ถํ๋ฉด payload์ ์ ๋ฐ์ดํธ๋ ๊ฐ์ด ์ ์ฐํ๋ ๊ฒ์ด๋ค!!!!!!!!
๋ฐ๋์ ์ ๋ถ์ก๊ณ ๋์ด์ ธ์๋๋ฐ ๋ฏธ์น ์ง๊ฒฝ... async - await๋ฅผ ์จ์ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ํด์คฌ๋๋ฐ ๋ญ๊ฐ ๋ถ๋ง์ด๋?! ๋ญ๊ฐ ์ ๋ชป ๋๊ฑด๋ฐ?! ....
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋์ ๋ณด๋ ๋น๋๊ธฐ promise + ๋ฐฐ์ด map() ํจ์ ์ฌ์ฉ์์ ๋น๋กฏ๋ ์ค๋ฅ์๋ค .
๐ฅ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด๋?
์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ๊ฑฐ๋, ํ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ค๋จํ์ง ์๊ณ ์คํํ๋ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ด๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ดํด ์ค์ํ ๊ฐ๋ ์ค ํ๋๋ก ์น ํ์ด์ง์์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ฑฐ๋, ์๊ฒฉ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋ค๋ฅธ ์์ ์ ๊ณ์ ํ ์ ์๋ค.
๐ฅ promise๋?
์๋ฐ์คํฌ๋ฆฝ์์ ๋น๋๊ธฐ ์์ ์ ๋ค๋ฃจ๊ธฐ ์ํ ๊ฐ์ฒด๋ก ์ธ๊ฐ์ง ์ํ๋ฅผ ๊ฐ์ง๋ค.
- Pending : ๋น๋๊ธฐ ์์ ์ด ์๋ฃ๋์ง ์์ ์ํ.
- Fulfilled: ๋น๋๊ธฐ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์ํ
- Rejected: ๋น๋๊ธฐ ์์
์ด ์คํจํ ์ํ
Promise๋ฅผ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฑ๊ณต ๋๋ ์คํจ์ ๋ฐ๋ผ ์์ ์ ์ํํ ์ ์์ต๋๋ค
๐ฅ ์ ๊ณ์ payload ์ ์ ๋ฐ์ดํธ ๋ ๊ฐ์ด ์ ์ฐํ๊ฒ์ธ๊ฐ?
aws s3 ๋ฒํท์ผ๋ก url๋ฅผ ์์ฑ๋ฐ๊ณ , file์ ๋ณด๋ด์ผํ๋๋ฐ ์ด ๋ฐ์ดํฐ๊ฐ์ด ๋ฐฐ์ด ์ํ์ ์์๋ก ๋ค์ด๊ฐ์์ด์ ๋ฐฐ์ด์ ๋๋ฉด์ 'url' ์ด๋ผ๋ key ๊ฐ์ value๊ฐ ๋น์ด์๋ ์๋๋ฅผ ์ฒดํฌํ๊ณ file์ด ์๋์๋๋ ์ฒดํฌํด์ผํ๋๋ฐ, ์ด ๋ฐฐ์ด์ ๋๋ฉด์ ์จ์ ํ ๋ค ๋์ง ๋ชป ํ๊ณ ์๋ต ๋ฐ์ง ์์ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ api๋ฅผ ํธ์ถํด๋ฒ๋ฆฐ๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฌธ์ ์ฌ๊ธฐ์ ๋ฏธ๋ฆฌ ํธ์ถ๋ฐ์ url ๊ฐ์ด ์๊ธฐ๋๋ฌธ์ api ์ฝํ๊ธฐ ์ ์ body๋ก ๋ณด๋ด๋ ํ๋ผ๋ฏธํฐ์๋ ๊ฐ์ด ์๋๊ฒ์ฒ๋ผ ์ฐํ๋ฒ๋ฆฐ๋ค.
ํ์ง๋ง ์ฌ์ค ๊ฐ์ด ์๋ ๊ฒ!
๊ทธ๋์ ์จ์ ํ aws s3 ๋ฒํท ์์ ์ ๋ค ๋๋ง์น ํ์ ๋ฐ์ดํฐ๋ฅผ updateํ๋ api๋ฅผ ํธ์ถํด์ผํ๋ค.
๋๋ ์ด๋ฏธ promise๋ฅผ ์จ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋ฅผํ๊ณ , ๋ฐ๋๋ console.log์ ์ ๋ฐ์ดํธ ๋ ๊ฐ์ผ๋ก ์ ์ถ๋ ฅ๋์๊ธฐ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ๋๋ํ ์ปดํจํฐ๋์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋ค... ใ ..
๐ฅ ํด๊ฒฐ ๋ฐฉ์
1. ์ด๋ฏธ์ง ์์ ์ ํ๋ ํจ์๋ฅผ ์ผ๋จ async - await ๋ก ๋น๋๊ธฐ์ฒ๋ฆฌํ๊ณ ์ ๋ฐ์ดํธ๋ ๋ฐ์ดํฐ ๊ฐ์ return ํ๊ฒ ํ๋ค
2. ์ด๋ return ๋ ๊ฐ์ด ํ์คํ๊ฒ ์์ ๋๋ง ๋ค์ api ํธ์ถ์ ํ ์ ์๊ฒ try - catch, if๋ฌธ ์ ํจ๊ป ์ด๋ค.
์์,
const ์ด๋ฏธ์ง ์์
ํจ์ =() => {
// ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋๋ฉด์ api ์ฝ
return ์
๋ฐ์ดํธ ๋ ๊ฐ
}
const ๋ฐ์ดํฐ ์ ์ฅ ํจ์ = async () =>{
try{
const ์
๋๋ ๋ฐ์ดํฐ = await ์ด๋ฏธ์ง ์์
ํจ์();
if(์
๋๋ ๋ฐ์ดํฐ){
const response = await ๋ฐ์ดํฐ ์ ์ฅ ํจ์ api(๋ฐ๋)
}
}catch(err){
console.log(err)
}
}
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ! if๋ฌธ์ ํ๋ฒ ๊ฑธ์ด์ค
์ด์ ์ ์คํจํ๋ ์ฝ๋๋ฅผ ๊ณต์ ํด๋ณด์๋ฉด
const ์ด๋ฏธ์ง ์์
ํจ์ =() => {
const ์ด๋ฏธ์ง ํจ์ = () =>{
// ๋ฐฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋๋ฉด์ api ์ฝ
}
return promise.all(์ด๋ฏธ์งํจ์)
}
const ๋ฐ์ดํฐ ์ ์ฅ ํจ์ = async () =>{
try{
return await ์ด๋ฏธ์ง ์์
ํจ์().then(() => {
return await ๋ฐ์ดํฐ ์ ์ฅ ํจ์ api(๋ฐ๋)
};
}catch(err){
console.log(err)
}
}
๋น์ฐํ ์ด๋ฏธ์ง ์์ ํจ์๋ฅผ ๋ชจ๋ ๋ค ๋๊ณ ๋ฐ์ดํฐ ์ ์ฅ ํจ์ api๋ฅผ ํธ์ถํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์์ ์ด ๋ค ๋๋์ง ์์ ์ํ์์ ํธ์ถํด๋ฒ๋ฆฐ๋ค.....
'๊ฐ๋ฐ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React/Typescript] ๊ฐ๋ก์ธ๋ก ๋ชจ๋ ๋๋๊ทธ๊ฐ ๊ฐ๋ฅํ ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ (2) | 2023.11.03 |
---|---|
[react/typescript] Swiper ์ฌ์ฉ๊ธฐ (2) | 2023.10.29 |
[๋ฆฌ์กํธ] React-Query - 2. CacheTime , StaleTime (feat.ReactQueryDevtools) (0) | 2023.05.09 |
[๋ฆฌ์กํธ] React-Query - 1. data fetch & error (0) | 2023.05.08 |
[๋ฆฌ์กํธ] React image file Resize ํ๊ธฐ / react-image-file-resizer (0) | 2022.11.28 |