부족했던 파일시스템에 대해 알아보자.
readfile.js
const fs = require('fs');
fs.readFile('./readme.txt', (err, data)=>{
if(err){
throw err
}
console.log(data); // <Buffer ea b8 80 ec 9d b4 20 ec 9e 85 eb a0 a5 20 ec 99 84 eb a3 8c 2e>
console.log(data.toString()); // readme.txt에 저장된 값(저를 읽어주세요!)
})
readme.txt
저를 읽어주세요!
data의 값이 buffer로 나오기 때문에 toString()을 이용해 값을 변경해줘야 한다.
buffer : 2진법을 16진법으로 바꾼 data, 컴퓨터가 다루는 data구나 라고 생각.
(아직 buffer를 모르겠으나 여기서는 이정도까지만 알아도 충분)
코드가 길어졌을 때 콜백 헬 발생.
promise를 이용한 파일 시스템
const fs = require('fs').promises;
fs.readFile('./readme.txt')
.then((data)=>{
console.log(data);
console.log(data.toString());
})
.catch((err)=>{
console.log(err);
})
promises를 붙여주면 알아서 promise를 지원하게 바꿔준다
const fs=require('fs').promises;
fs.writeFile('./writefile.txt', '글 입력 완료.')
.then(()=>{
return fs.readFile('./writefile.txt')
})
.then((data)=>{
console.log(data);
console.log(data.toString());
})
.catch((err)=>{
console.log(err);
})
해당 폴더에 writefile.txt 파일 생성
writefile.txt
글 입력 완료
const fs = require('fs');
fs.readFile('./readme.txt', (err,data)=>{
if(err){
throw err
}
console.log('1번', data.toString());
})
fs.readFile('./readme.txt', (err,data)=>{
if(err){
throw err
}
console.log('2번', data.toString());
})
fs.readFile('./readme.txt', (err,data)=>{
if(err){
throw err
}
console.log('3번', data.toString());
})
fs.readFile('./readme.txt', (err,data)=>{
if(err){
throw err
}
console.log('4번', data.toString());
})
4개의 fs함수 모두 백그라운드로 넘어가서 동기에 실행 ->
운영체제에서 먼져 끝난 함수를 task queue에 넣어줌 ->
매번 순서가 다르게 출력(문제점)
1번째 : promise를 이용
const fs = require('fs').promises;
fs.readFile('./readme.txt')
.then((data)=>{
console.log('1번', data.toString());
return fs.readFile('./readme.txt');
})
.then((data)=>{
console.log('2번', data.toString());
return fs.readFile('./readme.txt');
})
.then((data)=>{
console.log('3번', data.toString());
return fs.readFile('./readme.txt');
})
.then((data)=>{
console.log('4번', data.toString());
return fs.readFile('./readme.txt');
})
.catch((err)=>{
console.log(err)
})
2번째 : await 이용
const fs = require('fs').promises;
async function main(){
let data = await fs.readFile('./readme.txt');
console.log('1번', data.toString());
data = await fs.readFile('./readme.txt');
console.log('2번', data.toString())
data = await fs.readFile('./readme.txt');
console.log('3번', data.toString())
data = await fs.readFile('./readme.txt');
console.log('4번', data.toString())
}
main();