자바스크립트는 싱글 스레드 프로그래밍 언어이기 때문에 비동기 처리가 필수적이다.
비동기 처리는 그 결과가 언제 반환될지 알 수 없기 때문에 동기식으로 처리하는 기법들이 사용되어야 하는데, 대표적으로 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 |