반응형
콜백함수를 이용한 비동기 패턴 해결
가장 기본적인 방법으로 콜백함수를 이용해 비동기 패턴을 해결할 수 있습니다.
- test.txt
async test 1
async test 2
- index.js
const fs = require('fs');
fs.readFile('./test.txt', (err, data) => {
console.log(1)
console.log(data.toString());
fs.readFile("./test.txt", (err, data) => {
console.log(2);
console.log(data.toString());
fs.readFile("./test.txt", (err, data) => {
console.log(3);
console.log(data.toString());
console.log('test');
});
});
});
console.log('test');
- 실행 결과
- 첫번째 fs.readFile 을 실행하면 메인 스레드는 해당 코드를 다른 스레드에게 넘깁니다.
- 여기서 해당 코드를 전달받은 스레드를 워커 스레드라고 합니다.
- 워커 스레드는 첫 번째 fs.readFile 을 실행하고 실행이 끝나면 결과를 반환해 콜백함수를 메인 스레드에게 전달합니다.
- 메인 스레드는 콜백함수를 실행하는데 다시 fs.readFile 을 만나고 해당 스레드를 워커 스레드에게 전달합니다.
이 흐름을 반복하게 됩니다.
함수 형태로 분리하기
위의 방법은 코드가 길어지면 상당히 추상적이지 못하게 됩니다.
또한 코드가 점점 안쪽으로 들어가 화살표 형태가 됩니다. (콜백지옥)
각 fs.readFile 을 함수로 분리해 사용하면 조금 더 간결하게 표현할 수 있습니다.
const fs = require('fs');
const thirdFs = () => {
fs.readFile('./test.txt', (err, data) => {
console.log(3);
console.log(data.toString());
console.log('test');
})
}
const secondFs = () => {
fs.readFile("./test.txt", (err, data) => {
console.log(2);
console.log(data.toString());
thirdFs(); // thirdFs 호출
});
};
const firstFs = () => {
fs.readFile("./test.txt", (err, data) => {
console.log(1);
console.log(data.toString());
secondFs(); // secondFs 호출
});
};
firstFs(); // firstFs 호출
console.log('test');
- 이전의 코드보다 보기는 좋지만 코드를 작성하는 것에 있어 더 까다로워졌습니다.
이러한 문제점을 해결하기 위해 Promise 패턴을 사용할 수 있습니다.
다음 글에서 살펴보겠습니다!
반응형
'Study > Express(node.js)' 카테고리의 다른 글
node.js ) 비동기 패턴 해결 (3) - async/await (0) | 2022.02.05 |
---|---|
node.js ) 비동기 패턴 해결 (2) - Promise (0) | 2022.02.05 |
node.js ) 비동기 (asynchronous) 패턴 (0) | 2022.02.05 |
express ) express-generator 프로젝트 생성하기 (0) | 2022.02.05 |
express ) 미들웨어 (0) | 2022.02.04 |
댓글