앞선 아티클에서 우리는 3개의 뎁스를 가진 콜백 함수 예제를 살펴보았습니다.
function findAndSaveUser(Users){
Users.findOne( {}, (err, user) => { // 첫 번째 콜백
if(err){
return console.error(err);
}
user.name = 'zero';
user.save( (err) => { // 두 번째 콜백
if(err){
return console.error(err);
}
Users.findOne( { gender: 'm' }, (err, user) => { // 세 번째 콜백
/* 내용 생략*/
} );
} );
} );
}
위 예제에 대한 설명이 기억나지 않는다면, 아티클을 다시 복습해 보시기 바랍니다.
2. Javascript ES2015 (6) - 프로미스 [3/5]
앞선 아티클에서 프로미스를 사용하는 기본적인 패턴에 대해서 살펴보았습니다. 2. Javascript ES2015 (6) - 프로미스 [2/3] 우리는 앞선 아티클에서, 프로미스를 생성해 then, catch, finally를 출력하는 과
nozeroslope.tistory.com
이제 본격적으로 위 예제를 프로미스를 활용해서 간결하게 다듬어보도록 하겠습니다.
function findAndSaveUser(Users){
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({gender: 'm'});
})
.then((user) => {
// 내용생략
})
.catch(err => {
console.error(err);
})
}
위 예제가 살짝 헷갈릴 수 있습니다. 프로미스 초반에 학습했던 내용과 비교하면서 다시 차근차근 살펴보겠습니다. 우선, 프로미스 개념을 처음 설명할 때의 아티클을 되짚어보겠습니다.
2. Javascript ES2015 (6) - 프로미스 [1/5]
당연한 이야기이지만, Javascript와 Node에서는 비동기를 주로 사용하게 되고, 이벤트 리스너에서 콜백 함수에 대한 정의를 자주 쓰게 됩니다. 그러나, 이 콜백 함수들의 사용은 꽤나 코드를 복잡하
nozeroslope.tistory.com
초반에 아래와 같은 코드가 있습니다. 여기에서 new Promise 객체를 선언하는데, 파라미터에는 resolve와 reject를 파라미터로 받는 함수가 선언되어 있죠. 여기서는 조건 상 true가 전달되므로 then에는 resolve에서 지정해 둔 'SUCCESS parameter'가 파라미터로 전달됩니다.
const condition = true;
// true면 resolve, false면 reject
const promise = new Promise(
(resolve, reject) => {
if(condition){
resolve('SUCCESS parameter');
} else {
reject('FAILED parameter');
}
});
/*
기타 다른 동작들을 선언 가능한 영역
*/
promise
.then(
(message) => {
// 성공(resolve) 실행
console.log(message);
})
.catch(
(error) => {
// 실패(reject) 실행
console.error(error);
})
.finally(
() => {
// 무조건 실행
console.log('UNCONDITIONALLY');
});
/* 출력
SUCCESS parameter
UNCONDITIONALLY
*/
위 예제와 비교해 보면, promise라는 변수를 선언하는 과정이 없습니다. 기본형에서는 new Promise 라인에서 condition의 값에 따라 어떤 파라미터 값이 전달될지 선언하는 과정이 있었는데, 여기에는 그 과정이 없습니다. 즉, findOne과 save 메서드는 내부에 프로미스 객체를 갖고 있고 new Promise가 내부에 구현되어 있는 상태입니다.
function findAndSaveUser(Users){
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({gender: 'm'});
})
.then((user) => {
// 내용생략
})
.catch(err => {
console.error(err);
})
}
'Programming > Node.js' 카테고리의 다른 글
2. Javascript ES2015 (7) - async/awiat [1/2] (0) | 2024.02.28 |
---|---|
2. Javascript ES2015 (6) - 프로미스 [5/5] (0) | 2024.02.26 |
2. Javascript ES2015 (6) - 프로미스 [3/5] (0) | 2024.02.22 |
2. Javascript ES2015 (6) - 프로미스 [2/5] (0) | 2024.02.21 |
2. Javascript ES2015 (6) - 프로미스 [1/5] (0) | 2024.02.20 |