● 오늘 공부한 것
- fs 모듈, promise 과제 하기!
01_callBack.js
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
fs.readFile(filePath, 'utf8', (err, data)=>{
if (err) callback(err, null)
else callback(null, data)
})
};
getDataFromFile('README.md', (err, data) => console.log(data));
02_promiseConstructor.js
const { rejects } = require('assert');
const fs = require("fs");
const getDataFromFilePromise = filePath => {
return new Promise((resolve, reject)=>{
fs.readFile(filePath, 'utf8', (err, data)=>{
if(err) reject(err)
else resolve(data)
})
})
// TODO: Promise 및 fs.readFile을 이용해 작성합니다.
};
03_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으로 연결하여 작성합니다
const res = [];
return getDataFromFilePromise(user1Path)
.then(data => {
res.push(JSON.parse(data));
return getDataFromFilePromise(user2Path)
})
.then(data => {
res.push(JSON.parse(data));
return res;
})
}
04_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을 이용해 작성합니다
return Promise.all([getDataFromFilePromise(user1Path), getDataFromFilePromise(user2Path)])
.then(data=> data.map(item=> JSON.parse(item)))
.then(data => {
return data;
})
}
5번은 내일 ..!! 오늘 async,/await 공부하고 할 것임!!!
- Promise 공부했다!
[45장 프로미스]
프로미스 도대체 왜쓸까요? 가장 큰 이유는, 콜백헬을 다루기 위해서..! 그리고 비동기코드를 순차적으로 실행하기 위해서!! 그..그것이.. 프로미스니까..! ● 비동기 처리를 위한 콜백 패턴의 단
ddaeunbb.tistory.com
● 내가 놓치고 있던 것
[프로미스의 후속 메서드들은 모두 프로미스를 내뱉니?]
생각해보면 후속 메서드들은 promise관련된 메서드들이기때문에 무조건 프로미스여야함.. finally도 프로미스를 반환한다.
ddaeunbb.tistory.com
[Promise의 정적 메서드인 all, race, allSettled는 꼭 이터러블해야하눈가?]
Promise의 정적 메서드 all, race, allSettled은 반드시 배열 형태의 인자를 전달해야 하는 것은 아닙니다. 이들 메서드는 Promise 객체의 이터러블한 배열을 전달받아 실행되지만, 이터러블한 배열이 아
ddaeunbb.tistory.com
● 끝맺음
- 느낀점
- 진짜 지금까지 모던딥다이브를 공부하면서 가장 멘붕이 왔던 비동기 파트였다. 솔직하게 말하면 포기하고싶었고 의욕도 떨어졌는데, 코드따라쳐보고 해보니까 이해가 잘 됐다. 역시 해봐야한다.
- 프로미스와 친해지고 싶지 않았지만 매우 친해질 수 있게 되었다.
- 수업이외의 학습
- 제너레이터와 async / await