제로하우스
[비동기 예제] fs 모듈을 활용한 파일 읽기 본문
📌 목적
- fs 모듈을 활용하여 "파일 열기"를 구현한다.
- callback과 Promise를 구현한다.
- 텍스트 파일을 JSON.parse()를 통해 다른 언어들이 이용할 수 있도록 파싱한다.
📌 fs 모듈
File System 모듈은 Node.js의 내장 모듈이다. fs 모듈을 활용하여 파일 읽기, 파일 쓰기 등의 작업을 할 수 있다.
const fs = require("fs");
1. callback tc
파일 경로와 콜백함수를 입력받는다. 파일을 읽고, 에러가 발생한 경우에는 callback 함수에 데이터를 null로 넘겨주고, 이외의 경우에는 데이터를 넘겨준다.
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
// TODO: fs.readFile을 이용해 작성합니다
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
callback(err, null)
}
else {
callback(null, data)
}
})
};
getDataFromFile('README.md', (err, data) => console.log(data));
module.exports = {
getDataFromFile
};
2. promise tc
Promise 객체를 return하도록 한다.Promise는 (resolve, reject)를 인자로 받고, 파일을 읽은 후 에러가 발생한 경우에는 reject(err)
, 데이터를 성공적으로 받은 경우에는 resolve(data)
가 되도록 한다.
const fs = require("fs");
const getDataFromFilePromise = filePath => {
// TODO: Promise 및 fs.readFile을 이용해 작성합니다.
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf-8', (err, data) => {
if (err) {
reject(err)
}
else {
resolve(data)
}
})
})
};
getDataFromFilePromise('README.md').then(data => console.log(data));
module.exports = {
getDataFromFilePromise
};
3. basic chaining tc
then을 활용한다. 받아온 데이터를 JSON.parse()
를 이용하여 JSON 객체로 변환한 후 result 배열에 넣고 반환한다.
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
// HINT: getDataFromFilePromise(user1Path) 맟 getDataFromFilePromise(user2Path) 를 이용해 작성합니다
const readAllUsersChaining = () => {
// TODO: 여러개의 Promise를 then으로 연결하여 작성합니다
return new Promise((resolve, reject) => {
let result = []
getDataFromFilePromise(user1Path)
.then((data) => {
result.push(JSON.parse(data))
// return을 하지 않으면 아래 then에서 data를 받지 못한다
return getDataFromFilePromise(user2Path)
})
.then((data) => {
result.push(JSON.parse(data))
resolve(result)
})
})
}
readAllUsersChaining();
module.exports = {
readAllUsersChaining
}
4. Promise.all tc
Promise.all()
메서드를 활용하여 promise에서 데이터를 하나로 묶어 관리하며 처리한다.
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsers = () => {
// TODO: Promise.all을 이용해 작성합니다
const user1 = getDataFromFilePromise(user1Path)
const user2 = getDataFromFilePromise(user2Path)
return Promise.all([user1, user2])
.then((values) => {
return values.map((value) => JSON.parse(value))
})
}
readAllUsers()
module.exports = {
readAllUsers
}
5. async&await tc
async와 await를 이용하여 처리해본다.
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsersAsyncAwait = async () => {
// TODO: async/await 키워드를 이용해 작성합니다
result = []
let user1 = await getDataFromFilePromise(user1Path)
let user2 = await getDataFromFilePromise(user2Path)
result.push(JSON.parse(user1))
result.push(JSON.parse(user2))
return result
}
readAllUsersAsyncAwait();
module.exports = {
readAllUsersAsyncAwait
}
'기타 > 코드스테이츠 블록체인 부트캠프' 카테고리의 다른 글
[블록체인 부트캠프][회고록] Day16 (0) | 2022.05.19 |
---|---|
[비동기 예제] fetch API를 이용한 네트워크 요청 (0) | 2022.05.19 |
[블록체인 부트캠프][회고록] Day15 (0) | 2022.05.19 |
[블록체인 부트캠프][회고록] Day13 (0) | 2022.05.16 |
[블록체인 부트캠프][회고록] Day12 (0) | 2022.05.13 |
Comments