🤹🏻‍♀️ Javascript

async, await

ji-hyun 2022. 4. 23. 15:51

자바스크립트는 싱글 스레드 프로그래밍 언어이기 때문에 비동기 처리가 필수적이다.

비동기 처리는 그 결과가 언제 반환될지 알 수 없기 때문에 동기식으로 처리하는 기법들이 사용되어야 하는데, 대표적으로 setTimeout, callback, promise 가 있다.

 

 

 

 

 

async 와 await 는 절차적 언어에서 작성하는 코드와 같이 사용법도 간단하고 이해하기도 쉽다.

function 키워드 앞에 async만 붙여주면 되고

비동기로 처리되는 부분 앞에 await만 붙여주면 된다.

 

  • async가 붙은 함수는 프라미스를 반환하고, 프라미스가 아닌 것은 프라미스로 감싸 반환한다.
  • await 키워드를 만나면 프라미스가 처리(settled)될 때까지 기다린다.

 

 

 

 

 

 

사용 예시

 

 const todayVisitCount = await (async () => {
          if (isEndWithToday && isIncludeToday) {
            const visitCountStat = await prismaRO.todayStat.findFirst({
              where: { brandId: { equals: id } },
              select: { visitCount: true },
            });
            if (isNull(visitCountStat)) return 0;
            const { visitCount } = visitCountStat;
            return visitCount;
          }
          return 0;
        })();

 

 

 

 

 

export const brandListStat = objectType({
  name: "BrandListStat",
  description: "브랜드 LIST (테이블 데이터)",
  definition(t) {
    t.int("id");
    t.string("name");
    t.field("start", { type: "DateTime" });
    t.field("end", { type: "DateTime" });
    t.list.field("tableData", {
      type: "BrandListStatTable",
      description: "테이블 데이터",
      nullable: false,
      async resolve({ id: brandGroupId, start, end }, _args, { prisma }) {
        const brands = await prisma.brand.findMany({
          where: {
            AND: [
              { brandGroupId: { equals: brandGroupId } },
              { createdAt: { lte: end } },
            ],
          },
          select: { id: true, name: true },
        });
        return brands.map((brand) => ({
          start,
          end,
          ...brand,
        }));
      },
    });
  },
});

 

 

 

 

 

 

 

 

 

 

 

 

 

'🤹🏻‍♀️ Javascript' 카테고리의 다른 글

async, await, 즉시 실행 함수  (0) 2022.04.26
클로저의 활용 사례  (0) 2022.04.24
[Js] Map, Set 자료형  (0) 2022.04.23
[함수형 프로그래밍] 고차 함수  (0) 2022.04.22
Js 구조분해할당  (0) 2022.03.17