Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit3. [์ค์ต] fs ๋ชจ๋ ๋ณธ๋ฌธ
๐ฃ fs ๋ชจ๋์ ํตํด ๋น๋๊ธฐ ๊ตฌํํ๊ธฐ
โ๏ธ fs.readFile("filename", [options], callback)
โฐ "filename" ํ์ผ์ [options] ์ ์ ์ฉํด ์ฝ์ ํ callback ํจ์๋ฅผ ์คํํ๋ค.
โฐ ํ์ผ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฝ์ด์ฌ ์ ์๋ค.
โฐ ๋๋ฒ์งธ ์ธ์๋ฅผ "utf8" ๋ก ๋ช ์ํ์ฌ ์ธ์ฝ๋ฉ์ด ๋๋๋ก ํด์ค์ผ ํ๋ค.
1๏ธโฃ callback.js
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
};
โฐ fs.readFile() ์ ํ์ผ์ ์ฝ๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋๋ฉด ์ต๋ช ์ ํจ์ err์ ๋์ง๊ณ , ์ฑ๊ณตํ๋ฉด data์ ๊ทธ ๋ด์ฉ์ ๋ด๋๋ค.
โฐ err๊ฐ ๋ ์์ค๋ฉด callback ํจ์์ err๋ฅผ ์ธ์๋ก ์ฃผ๊ณ , ์ฑ๊ณตํ๋ฉด callback ํจ์์ data๋ฅผ ์ธ์๋ก ์ค๋ค.
2๏ธโฃ promiseConstructor.js
const fs = require("fs");
const getDataFromFilePromise = filePath => {
// return new Promise()
// TODO: Promise ๋ฐ fs.readFile์ ์ด์ฉํด ์์ฑํฉ๋๋ค.
return new Promise((resolve, reject) => {
fs.readFile(filePath, "utf8", (err, data) => {
if(err){
reject(err);
}
else{
resolve(data);
}
});
})
};
getDataFromFilePromise('README.md').then(data => console.log(data));
module.exports = {
getDataFromFilePromise
};
โฐ Promise๋ฅผ ์ฌ์ฉํด์ ์์ ๋๊ฐ์ด ์๋ํ๋ ์ฝ๋ ์์ฑ
โฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด reject๋ฅผ, ์ฑ๊ณตํ๋ฉด resolve๋ฅผ ์คํํ๋ค.
3๏ธโฃ basicChaining.js
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์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์์ฑํฉ๋๋ค
let result = [];
return getDataFromFilePromise(user1Path)
.then((user1) => {
result.push(JSON.parse(user1));
return getDataFromFilePromise(user2Path)
.then((user2) => {
result.push(JSON.parse(user2));
return result;
})
})
}
// readAllUsersChaining();
module.exports = {
readAllUsersChaining
}
โฐ ํ์ผ์ ์ฝ์ด์ค๋ ํจ์๋ fs.readFile์ด ์๋ callback.js์์ ๊ตฌํํ getDataFromFilePromise๋ฅผ ์ด์ฉํ๋ค.
โฐ .then์ ์ฌ์ฉํด์ promise chain์ ๊ตฌํํ๋ค.
โฐ user1 ํ์ผ์ ๋ด์ฉ์ ์ฝ์ด์ค๋๋ฐ ์ฑ๊ณตํ๋ฉด, ๊ทธ ๋ฐ์ดํฐ๋ฅผ user1 ์ด๋ผ๊ณ ํ๊ณ ํ์ฑ ํ result ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.
โฐ ์ ๊ณผ์ ์ด ๋ชจ๋ ์ฑ๊ณตํ๋ฉด user2 ํ์ผ์ ๋ด์ฉ์ ์ฝ์ด์ค๊ณ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
4๏ธโฃ promiseAll.js
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์ ์ด์ฉํด ์์ฑํฉ๋๋ค
let result = [];
const user1 = getDataFromFilePromise(user1Path).then((data) => JSON.parse(data));
const user2 = getDataFromFilePromise(user2Path).then((data) => JSON.parse(data));
return Promise.all([user1, user2]).then((values) => {
return values;
});
}
// readAllUsers()
module.exports = {
readAllUsers
}
โฐ promise.all ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ค.
โฐ user1๊ณผ user2์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์์ ์ฑ๊ณตํ๋ฉด, ํ์ฑ ํ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ค.
โฐ user1๊ณผ user2๋ฅผ promise.all์ ์ธ์๋ก ์ฃผ์ด์ ์ํํ๊ฒ ํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ค์ values์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
5๏ธโฃ asyncAwait.js
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 ํค์๋๋ฅผ ์ด์ฉํด ์์ฑํฉ๋๋ค
let result = [];
const user1 = await getDataFromFilePromise(user1Path).then((data)=> JSON.parse(data));
const user2 = await getDataFromFilePromise(user2Path).then((data)=> JSON.parse(data));
result = [user1, user2];
return result;
}
readAllUsersAsyncAwait();
module.exports = {
readAllUsersAsyncAwait
}
โฐ readAllUsersAsyncAwait์ ์ฝ๋ฐฑํจ์๋ async()๊ฐ ๋ถ์์ผ๋ฏ๋ก Promise๋ฅผ ๋ฐํํ๋ค.
โฐ const user1์ await๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ user1 ์ฝ๋์ ๊ฒฐ๊ณผ๊ฐ์ ์ป์ด์ผ ๋ค์ ์ฝ๋๊ฐ ์คํ๋๋ค. -> ๋น๋๊ธฐ์
'CodeStates > Training' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 6. [์ค์ต] React Twittler State & Props (0) | 2023.01.27 |
---|---|
S2) Unit3. [์ค์ต] fetch API (0) | 2023.01.19 |
S2) Unit3. [์ค์ต] ํ์ด๋จธ API (0) | 2023.01.18 |
S2) Unit3. [์ค์ต] Underbar (0) | 2023.01.17 |
S2) Unit2. [์ค์ต] Beesbeesbees (0) | 2023.01.16 |