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;
});
})();