Promisify

promisify()v8.0.0에서 추가된 util모듈의 내장함수입니다. 공식문서에 따르면 일반적인 error-first callback style을 따르는 콜백함수를 가져다 promise를 반환하는 함수를 반환합니다. 따라서 callback함수를 new Promise로 감싸주지 않아도 promisify()를 통해 간단히 promise로 사용할 수 있습니다.

Error First style

일반적으로 (err, value) => ...의 형태를 가지는, 에러를 가장 먼저 반환하는 스타일의 callback함수를 의미합니다.

사용 예시

util.promisify()promise를 반환하기 때문에 일반적인 promise를 다루는 법과 같습니다.

Then, Catch, Finally를 이용하는 방법

1
2
3
4
5
6
7
8
9
const util = require('util');
const fs = require('fs');

const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
// Do Something with `stats`
}).catch((error) => {
// error 처리
});

위와 같이 then을 통해 promise를 이용할 수 있고 마찬가지로 async를 이용할 수도 있습니다.

1
2
3
4
5
6
7
8
9
const util = require('util');
const fs = require('fs');

const stat = util.promisify(fs.stat);

async function callStat() {
const stats = await stat('.');
console.log(`이 디렉토리는 ${stats.uid}의 소유입니다.`);
}

Error 처리

예외를 처리하는 방법은 promisify()가 실제로 promise를 반환하기 때문에 일반적으로 promise의 예외를 처리하는 방법과 동일합니다. 위의 사용 예시와 같이 thencatch를, async/await을 사용하는 경우에는 trycatch를 통해 예외를 처리할 수 있습니다.