무지성 await 연달아쓰기 금지

jeongwon yun·2022년 10월 16일
0

Javascript Core

목록 보기
10/13
function delay(ms) {
	return new Promise((resolve, reject) => {
    	setTimeout(() => {}, ms);
    });
}

async function a() {
	await delayP(3000); // 3초
  	await delayP(6000); // 6초
  	await delayP(9000); // 9초
} // 총 18초

async function b() {
	const p1 = delayP(3000);
  	const p2 = delayP(6000);
  	await Promise.allSettled([p1, p2]); // 6초
  	await delayP(9000); // 9초
} // 총 15초

실행은 바로 되는데
결괏값은 나중에 resolve 될 때
결괏값 사용은 더 나중


async function createPost() {
	await db.getPost();
  	if (post) {
    	res.status(403).send('이미 게시글이 존재합니다.');
    } else {
    	await db.createPost(); // 게시글 작성
      
      	await db.userIncrementPostCount(); // 사용자에 게시글 카운트 1 올림
		await db.createNoti(); // 새로운 게시글 알림 등록
    }
}

3번 째 await, 4번 째 await 은 굳이 3번 째 끝날 때까지 기다리고 4번 째를 실행할 필요가 없다.

async function createPost() {
	await db.getPost();
  	if (post) {
    	res.status(403).send('이미 게시글이 존재합니다.');
    } else {
    	await db.createPost(); // 게시글 작성
      
      	const p1 = db.userIncrementPostCount(); // 사용자에 게시글 카운트 1 올림
		const p2 = db.createNoti(); // 새로운 게시글 알림 등록
      	await Promise.allSettled([p1, p2]);
    }
}

이렇게 하면 p1 과 p2 를 거의 비슷하게 실행시킬 수 있다.


async function c() {
	const a = await 1;
  	const b = await 2;
  	return a + b;
}

위 async/await 를 프로미스로 바꿔보자!

(function c() {
	let a;
  	let b;
  	return Promise.resolve(1)
  		.then((res1) => {
      		a = res1
    		return 2;
    	})
  		.then((res2) => {
    		b = res2
      		return a + b;
    	});
})();

0개의 댓글