프로미스_콜백을 프로미스로 바꾸는 방법

릭터·2026년 1월 29일

Javascript

목록 보기
7/13

콜백을 프로미스로 바꾸는 방법

콜백

function findAndSaveUser(Users){
	Users.findOne({},(err,user) => { // 첫번째 콜백
    	if(err){
        	return console.error(err);
         }
         user.name = 'ricter'
         user.save((err) => { // 두번째 콜백
         	if(err){
            	return console.error(err);
            }
         Users.findOne({gender:'m'},(err,user) => { // 세번째 콜백
         	if(err) {
            	return console.error(err);
            }
        });
     });
  });
}

위의 코드는 콜백 함수가 세번 중첩되어 있어 콜백 함수 마다 코드의 깊이도 깊어지고 에러도 따로 처리해줘야한다

프로미스

function findAndSaveUser(Users){
	Users.findOne({}).then((user) => {
    	user.name ='rickter',
        return user.save();
      }).then((user) => {
      	return Users.findOne({gender:'m'});
      }).catch(err => {
      	console.error(err);
      });
}

코드가 더 깊어지지 않고 then 메서드들이 순차적으로 실행된다.
콜백에서 매번 따로 처리해야 했던 에러도 마지막 catch에서 한번에 처리 가능해졌다.
위의 방법은 메서드가 프로미스 방식을 지원해야지만 이렇게 바꿀 수 있는데 findOne과 save 메서드가 프로미스 객체를 가지고 있어 가능한 것이다.


프로미스 여러개를 한 번에 실행하는 방법

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

 실행결과 : ['성공1','성공2']

Promise.resolve는 즉시 resolve 하는 프로미스를 만드는 방법이다.
비슷한 것으로 즉시 reject 하는 Promise.reject도 있다.
프로미스가 여러개 있을 때 Promise.all에 넣으면 모두 resolve 될 때까지 기다렸다가 then으로 넘어간다.
result 매개변수에 각각 프로미스 결괏값이 배열로 들어 있다.
Promise 중 하나라도 reject가 되면 catch로 넘어간다.

profile
풀스택 개발자를 꿈 꾸는 릭터입니다.

0개의 댓글