const condition = true; // true면 resolve, false면 reject
const promise = new Promise((resolve, reject) => {
if(condition) {
resolve('성공');
} else {
reject('실패');
}
});
-----------------------------
promise
.then((message) => {
console.log(message); // 성공(resolve)한 경우 실행
})
.catch((error) => {
console.log(error); // 실패(reject)한 경우 실행
})
.finally(() => { // 끝나고 무조건 실행
console.log('무조건실행');
});
프로미스의 then 연달아 사용 가능(프로미스 체이닝)
promise
.then((message) => {
return new Promise((resolve, reject) => {
resolve(message);
});
})
.then((message2) => {
console.log(message2);
return new Promise((resolve, reject) => {
reslove(message2);
});
})
.then((message3) => {
console.log(message3);
})
.catch((error) => {
console.error(error);
}
콜백패턴(3중첩)을 프로미스로 바꾸는 예제
function findAndSaveUser(Users) {
Users.findOne({}, (err, user) => {
if(err) {
return console.log(err);
}
user.name = 'Lee';
user.save((err) => {
if(err) {
return console.log(err);
}
Users.findOne({gender: 'm'}, (err, user) => {
..........
});
});
});
}
--------------------------------------
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'Lee';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm'});
})
.then((user) => {
............
})
.catch((err) => {
console.log(err);
});
}
const promise1 = Promise.resolve('성공1');
const promise2 = promise.resolve('성공2');
Promise.all([promise1, promise2])
.then((result) => {
console.log(result); // ['성공1', '성공2'];
}).catch((err) => {
console.log(error);
});
async function findAndSaveUser(Users) {
try {
let user = await Users.findOne({});
user.name = 'Lee';
user = await user.save();
user = await Users.findOne({gender: 'm'});
} catch(error) {
console.log(error);
}
}