Util 모듈
내장 모듈로 코드 유지보수,디버깅,보조적인 기능을 위해 사용
(새 기능을 만들기 보다는 기존 기능을 편리하게 다루도록 도와줌)
const util = require('util');
promisify(Callback -> Promise)
Node.js 비동기 작업은 콜백함수 방식이 많은데 좀 더 깔끔함 Promise방식으로 바꿔주는 util모듈의 함수
예제
trails.js에 있는 객체의 값을 callback방식이랑 promise방식으로 가져오기
trails.js
module.exports = trails = {
'Appalachian': {
'nickname': 'AT',
'miles': 2189.1,
'kilometers': 3253,
'region': 'Appalachian Mountains'
},
'Continental Divide': {
'nickname': 'CDT',
'miles': 3100,
'kilometers': 5000,
'region': 'Rocky Mountains'
},
'North Country': {
'nickname': 'NCT',
'miles': 4600,
'kilometers': 7400,
'region': 'Northern United States'
},
'Pacific Crest': {
'nickname': 'PCT',
'miles': 2654,
'kilometers': 4271,
'region': 'West Coast'
}
}
파일 및 util 모듈 불러오기
const trails = require('./trails.js');
const util = require('util');
callback방식
기존의 callback 활용 함수 + callback 함수 + 함수 호출
기존의 callback 활용 함수
const getTrailDistance = (trail,callback) => {
return setTimeout (() => {
if (trails.hasOwnProperty(trail)) {
const foundTrail = trails[trail];
callback(null,foundTrail);
} else {
callback(new Error('Trail not found!'));
}
},1000);
};
기존의 callback 함수
function callback(error,trailData){
if(error){
console.error(error.message);
process.exit(1);
}
else{
const nickname = trailData.nickname;
const mi = trailData.miles;
console.log(`The ${nickname} is ${mi} miles long!`);
}
}
함수 호출
getTrailDistance('North Country',callback);
Promise 방식
promisify로 callback기반 함수를 promise방식으로 변환
const getTrailDistancePromise = util.promisify(getTrailDistance);
promise(바뀐 방식)으로 호출
getTrailDistancePromise('North Country')
.then(trailData => {
const mi = trailData.miles;
const nickname = trailData.nickname;
console.log(`The ${nickname} is ${mi} miles long!`);
})
.catch(error => {
console.error(error.message);
});
마무리
전체 코드
const trails = require('./trails.js');
const util = require('util');
const getTrailDistance = (trail, callback) => {
return setTimeout(() => {
if (trails.hasOwnProperty(trail)) {
const foundTrail = trails[trail];
callback(null, foundTrail)
} else {
callback(new Error('Trail not found!'))
}
}, 1000);
}
function callback (error, trailData) {
if (error) {
console.error(error.message)
process.exit(1)
} else {
const mi = trailData.miles;
const nickname = trailData.nickname;
console.log(`The ${nickname} is ${mi} miles long!`)
}
}
getTrailDistance('North Country', callback)
const getTrailDistancePromise = util.promisify(getTrailDistance);
getTrailDistancePromise('North Country')
.then(trailData => {
const mi = trailData.miles;
const nickname = trailData.nickname;
console.log(`The ${nickname} is ${mi} miles long!`);
})
.catch(error => {
console.error(error.message);
});
결과
The NCT is 4600 miles long!
The NCT is 4600 miles long!
'개발' 카테고리의 다른 글
| Node.js(with codecademy) - 5 (0) | 2025.06.20 |
|---|---|
| Node.js(with codecademy) - 3 (2) | 2025.06.18 |
| Node.js(with codecademy) - 2 (1) | 2025.06.17 |
| 백준 11650 - 좌표정렬하기 (0) | 2025.06.17 |