// 성공할 때
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => { // 비동기적 코드를 만들기 위해
resolve('result'); // 결과 반환
}, 1000)
});
// Promise가 끝난 뒤 할 작업 설정
myPromise.then(result => {
cnosole.log(result);
})
// 결과: result
// 실패할 때
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error());
}, 1000)
});
myPromise.then(result => {
console.log(result);
}).catch(e => {
console.error(e);
})
// 결과: Error at <anonymous>:3:12
function increaseAndPrint(n) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const value = n + 1;
if (value === 5) {
const error = new Error();
error.name = 'ValueIsFiveError'; // 에러 이름 정함
reject(error);
return;
}
console.log(value);
resolve(value); // 결과 반환
}, 1000);
})
}
increaseAndPrint(0).then(n => {
console.log('result: ', n);
})
increaseAndPrint(0).then(n => {
return increaseAndPrint(n);
}).then(n => {
return increaseAndPrint(n);
}).then(n => {
return increaseAndPrint(n);
}).then(n => {
return increaseAndPrint(n);
}).then(n => {
return increaseAndPrint(n);
}).catch(e => {
console.error(e);
})
increaseAndPrint(0).then(increaseAndPrint)
.then(increaseAndPrint)
.then(increaseAndPrint)
.then(increaseAndPrint)
.then(increaseAndPrint)
.catch(e => {
console.error(e);
})
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function process() {
console.log('안녕하세요!');
await sleep(1000); // promis 앞 부분에 await
console.log('반갑습니다!');
}
process();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function process() {
console.log('안녕하세요!');
await sleep(1000);
console.log('반갑습니다!');
return true;
}
process().then(value => {
console.log(value);
});
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function makeError() {
await sleep(1000);
const error = new Error();
throw error; // 에러 발생 시킬 때
}
async function process() {
try {
await makeError();
} catch (e) { // e는 위의 error 객체
console.error(e);
}
}
process();
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const getDog = async () => {
await sleep(1000);
return '멍멍이';
}
const getRabbit = async () => {
await sleep(500);
return '토끼';
}
const getTurtle = async () => {
await sleep(3000);
return '거북이';
}
async function process() {
const dog = await getDog();
console.log(dog);
const rabbit = await getRabbit();
console.log(rabbit);
const turtle = await getTurtle();
console.log(turtle);
}
process();
async function process() {
try {
const results = await Promise.all([getDog(), getRabbit(), getTurtle()]);
console.log(results);
} catch (e) {
console.log(e);
}
}
📌 Promise.all() 안에 있는 Promise 중 하나라도 에러가 발생하면 전부 다 에러로 간주하고, catch 안의 에러 메세지를 띄운다.
async function process() {
const [dog, rabbit, turtle] = await Promise.all([getDog(), getRabbit(), getTurtle()]);
console.log(dog);
console.log(rabbit);
console.log(turtle);
}
async function process() {
try {
const first = await Promise.race([getDog(), getRabbit(), getTurtle()]);
console.log(first);
} catch (e) {
console.log(e);
}
}
📌 Promise.race() 안에 있는 Promise 중 가장 빨리 끝나는 Promise가 에러일 때만 에러로 간주하고, 나머지는 확인 하지 않는다.