내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
Then을 붙이면 결과를 반환함
실행이 완료되지 않았으면 완료된 후에
Then 내부 함수가 실행됨
Resolve(성공리턴값) -> then으로 연결
Reject(실패리턴값) -> catch로 연결
Finally 부분은 무조건 실행됨
const condition = true;
const promise = new Promise((resolve, reject) => {
if(condition){
resolve('성공');
} else {
reject('실패');
}
});
promise
.then((msg) => {
console.log(msg); // 성공(resolve)
})
.catch((error) => {
console.error(error); // 실패(reject)
})
.finally(() => {
console.log('always') // 끝나고 무조건 실행
});
프로미스의 then 연달아 사용 가능(프로미스 체이닝)
then 안에서 return한 값이 다음 then으로 넘어감
return 값이 프로미스면 resolve 후 넘어감
에러가 난 경우 바로 catch로 이동
에러는 catch에서 한 번에 처리
promise
.then((msg) => {
return new Promise((resolve, reject) => {
resolve(msg);
});
})
.then((msg2) => {
console.log(msg2);
return new Promise((resolve, reject) => {
resolve(msg2);
});
})
.then((msg3) => {
console.log(msg3);
})
.catch((error) => {
console.log(error);
})
Promise.resolve(성공리턴값): 바로 resolve하는 프로미스
Promise.reject(실패리턴값): 바로 reject하는 프로미스
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
Promise.all([promise1, promise2])
.then((result) => {
console.log(result); // ['성공1', '성공2']
})
.catch((error) => {
console.error(error);
})
Promise.all(배열): 여러 개의 프로미스를 동시에 실행
하나라도 실패하면 catch로 감
Promise.allSettled로 실패한 것만 추려낼 수 있음
변수 = await 프로미스;인 경우 프로미스가 resolve된 값이 변수에 저장
변수 await 값;인 경우 그 값이 변수에 저장
async function findAndSaveUser(Users) {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender : 'm' });
// 생략
}
에러 처리를 위해 try catch로 감싸주어야 함
각각의 프로미스 에러 처리를 위해서는 각각을 try catch로 감싸주어야 함
async function findAndSaveUser(Users) {
try {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender : 'm' });
// 생략
} catch (error) {
console.error(error);
}
}
노드 10부터 지원
for await (변수 of 프로미스배열)
resolve된 프로미스가 변수에 담겨 나옴
await을 사용하기 때문에 async 함수 안에서 해야함
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
(async () => {
for await (promise of [promise1, promise2]) {
console.log(promise);
}
})();