처음 then에서 message를 resolve하면 다음 then에서 message2로 받을 수 있습니다. 여기서 다시 message2를 resolve한 것을 다음 then에서 message3으로 받았습니다. 단, then에서 new Promise를 return해야 다음 then에서 받을 수 있다는 것을 기억하세요.
이것을 활용해서 콜백을 프로미스로 바꿀 수 있습니다. 다음은 콜백을 쓰는 패턴 중 하나입니다. 나중에 8장을 배우면 이 코드를 더 정확하게 이해할 수 있습니다. 이를 프로미스로 바꿔보겠습니다.
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) => { // 세 번째 콜백 // 생략 }); }); }); }
콜백 함수가 세 번 중첩되어 있습니다. 콜백 함수가 나올 때마다 코드의 깊이가 깊어집니다. 각 콜백 함수마다 에러도 따로 처리해줘야 합니다. 이 코드는 다음과 같이 바꿀 수 있습니다.