diff --git "a/\354\261\225\355\204\260_9/\354\232\260\354\260\275\354\231\204.md" "b/\354\261\225\355\204\260_9/\354\232\260\354\260\275\354\231\204.md" new file mode 100644 index 0000000..3346d23 --- /dev/null +++ "b/\354\261\225\355\204\260_9/\354\232\260\354\260\275\354\231\204.md" @@ -0,0 +1,78 @@ +# 9장 비동기 프로그래밍 패턴 + + + +gpt 에 Promise 패턴 몇 개 만들어줘 ~ 입력하고 그래로 복붙한 것 같다. + + + +간혹 callback 함수를 Promise로 래핑하는 경우: + +```js +// 기존 레거시 콜백 함수, 이미 여러 함수가 이 함수를 사용하고 있어서 변경할 수 없을 경우 +function readFileCallback(filename, callback) { + fs.readFile(filename, 'utf8', (err, data) => { + if (err) { + callback(err, null); + return; + } + const processedData = data.toUpperCase(); + callback(null, processedData); + }); +} +``` + + + +* Promise로 직접 래핑하기 + + ```js + //1. Promise로 직접 래핑 + function readFilePromise(filename){ + return new Promise((resolve, reject) => { + readFileCallback(filename, (err, data) => { + if(err){ + reject(err) + return + } + resolve(data); + }) + }) + } + ``` + + + +* promisify 유틸함수 사용 + + ```js + // Promise로 래핑하는 방법 2: 유틸리티 함수 사용 + function promisify(fn) { + return function (...args) { + return new Promise((resolve, reject) => { + fn(...args, (err, data) => { + if (err) { + reject(err); + return; + } + resolve(data); + }); + }); + }; + } + + // 유틸리티 함수를 사용해서 래핑 + const readFilePromisified = promisify(readFileCallback); + ``` + + + +* node 환경이라면, promisify 딸깍할 수 있다 + + ```js + import { promisify } from "node:util" + + const readFilePromisified2 = util.promisify(readFileCallback); + ``` + + \ No newline at end of file