[React] ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ์—ฌ์ •(1) - Promise.all
728x90

Today, What I learned?

๋งˆ์ดํŽ˜์ด์ง€์˜ ํ•ด๋‹น ์œ ์ € ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ธด ์—ฌ์ •....

๋‚˜๋ฅผ ๋น™๊ธ€ ๋Œ์•„๋ฒ„๋ฆฌ๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ Promise์™€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ Promise.all์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

 

๋ฐœ๋‹จ, Promise ๋ฐฐ์—ด

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์กฐ๊ธˆ ๋ณต์žกํ•œ ํŽธ์ธ๋ฐ..

๋งˆ์ดํŽ˜์ด์ง€์—์„œ์˜ ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ๋Š” ํ™œ์„ฑํ™”๋œ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฐ๋ผ์„œ ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋“ค์„ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ์ง€์›ํ•œ ํ”„๋กœ์ ํŠธ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์‹..

 

๋ญ ์—ฌ๊ธฐ๊นŒ์ง€์•ผ ๋ณดํ†ต์˜ ํ•„ํ„ฐ๋ง์ด์ง€ ์•Š๋‚˜? ์‹ถ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š”

์–ป์–ด์˜จ ๊ฐ๊ฐ์˜ ๋ฌธ์„œ์•„์ด๋”” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ๊ฐ๊ฐ์˜ ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š”.. ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

์™œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์ด๋Ÿฐ๊ฐ€์š”?๋ผ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ์šฐ๋ฆฌ ํŒ€์€ ๋ชจ๋‘ ํ”„๋ก ํŠธ์—”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๊ณ .. NoSQL์ธ ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ ํŒŒ์ด์–ด์Šคํ† ์–ด๋ฅผ ์ด์šฉ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํ˜„์žฌ๋กœ์„œ ์ตœ์„ ์ด์—ˆ๋‹ค!๋ผ๊ณ  ๋‹ตํ•˜๊ฒ ๋‹ค...

 

์ด๊ฑฐ ๊ฝค ๋ณต์žกํ•ด๋ณด์ด๋Š”๊ฑธ,,,,

findWithCollectionName ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ..
๋ฌธ์ œ๋Š” map ์•ˆ์—์„œ ์ € ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ํ•˜๋ฉด Promise์˜ ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋œ๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

[Promise, Promise, ... ] ์ด๋ ‡๊ฒŒ.. ๐Ÿ˜‚

 

((findWithCollectionName ์ด ํ•จ์ˆ˜๊ฐ€ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜€๊ธฐ ๋•Œ๋ฌธ์— Promise๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํ–ˆ์Œ))

 

 

์—ฌ๋Ÿฌ ๊ธ€๋“ค์„ ์ฐธ๊ณ ํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ๋ฐ”๊นฅ์œผ๋กœ๋„ ๋นผ๋ณด๊ณ .. ๋ณ„ ์‹œ๋„๋ฅผ ๋‹ค ํ–ˆ๋Š”๋ฐ๋„ ์ง€๊ฒน๊ฒŒ ๋ฐ˜ํ™˜๋˜๋Š” Promise ๋ฐฐ์—ด์€ ์ •๋ง ๊ณ ํ†ต ๊ทธ ์ž์ฒด์˜€๋‹ค.. ํ‘ํ‘
๋ฉ˜๋ถ•์ด ์˜ค๋‹ค๋ณด๋‹ˆ ๊ตฌ๊ธ€๋ง์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€๋„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ํŒ€์›๋ถ„๋“ค์—๊ฒŒ ๋„์›€์„ ์š”์ฒญ!..

 

ํŒ€์žฅ๋‹˜์—๊ฒŒ์„œ Promise.all์„ ์ด์šฉํ•ด๋ณด๋ผ๋Š” ์กฐ์–ธ์„ ๋ฐ›์•˜๋‹ค.

 

 

Promise.all

Promise.all()์€ ํ”„๋กœ๋ฏธ์Šค ๋ฐฐ์—ด ์•ˆ์—์„œ ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์„œ, ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ์ตœ์ข…์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค..!

Promise.all() ์™ธ์—๋„ ์ค‘๊ฐ„์— ํ•˜๋‚˜๋ผ๋„ ๊ฑฐ๋ถ€๋œ๋‹ค๋ฉด ์ค‘๋‹จ๋˜๋Š” Promise.race() ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

 

๋‚˜๋Š” ์ค‘๊ฐ„์— ๋ฐ˜ํ™˜๋˜๋ฉด ์•ˆ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ ํ›…์˜ ํ•จ์ˆ˜๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ–ˆ๋”๋‹ˆ..

  // ํ˜„์žฌ ์„ ํƒ๋œ ํƒญ์˜ ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ ํ•จ์ˆ˜
  const getActiveProjects = async (params: any) => {
    const [_, pidList] = params.queryKey;

    const data = await Promise.all(
      pidList.map((pid: string) => findWithCollectionName('post', pid)),
    );
    const filteredData = data.filter((item) => item !== undefined);

    return filteredData;
  };

 

 

๋“œ๋””์–ด ๋‚ด๊ฐ€ ์ฐพ๋˜ ์˜จ์ „ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค!!!!!! (๊ฐ๋™ ๊ทธ ์žก์ฑ„)

 

์ด ํ•จ์ˆ˜ ์—ญ์‹œ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜€๊ธฐ ๋•Œ๋ฌธ์—.. ์‹ค์ œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” useQuery๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ€์ ธ์™”๋‹ค.

  const { data: activeProjectsData }: any = useQuery({
    queryKey: ['myProjects', currentPidList],
    queryFn: getActiveProjects,
    staleTime: staleTime.myProjects,
  });

์ผ๋‹จ ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ์˜ ํƒญ์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ๋ฆฌ์ŠคํŠธ๋Š” ์ž˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋๋‚œ ๊ฒŒ ์•„๋‹ˆ๋‹ค ใ…Žใ……ใ…Ž...
2ํŽธ์—์„œ ๊ณ„์†..

 

 

์ฐธ๊ณ 

https://velog.io/@yhe228/ayncawait%EB%A5%BC-map%EC%95%88%EC%97%90%EC%84%9C-%EC%9D%B4%EC%9A%A9%ED%95%98%EB%A0%A4%EB%A9%B4

 

aync/await๋ฅผ map์•ˆ์—์„œ ์ด์šฉํ•˜๋ ค๋ฉด?

๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ..!map ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ url์—์„œ ์‘๋‹ต๋ฐ›์€ ๋ฐ์ดํ„ฐ๋กœ dataList๋ฅผ ๋งคํ•‘ํ•˜๋ คํ–ˆ์ง€๋งŒ.. ์ฝ˜์†”์— ์ฐํžŒ ๊ฒฐ๊ณผ๊ฐ’์€... ์•„๋ž˜์™€ ๊ฐ™๋‹ค.์ด๋ ‡๊ฒŒ map์˜ ๊ฒฐ๊ณผ๊ฐ’์„ result์— ๋‹ด์•„ ์ฝ˜

velog.io

 

728x90