비동기_fs 모듈

김범주·2022년 3월 11일
0

Section 2

목록 보기
7/14

Promise

callback hell이 일어나지 않도록 핸들링할 수 있게 해줌
주로 서버에서 받아온 데이터를 화면에 표시할 때 사용
객체를 반환한다!!!

Promise의 세 가지 상태

Pending : 비동기 처리가 완료되지 않은 상태
Fulfilled : 비동기 처리가 완료되어 프로미스가 결과 값을 반환한 상태
Rejected : 비동기 처리가 실패하거나 오류가 발생한 상태

Promise의 사용

callback 함수로 (resolve, reject)를 받아 resolve를 통해 fulfilled 상태가 되면 .then을 사용해 결과 값을 받아서 사용할 수 있음
rejected 상태가 되면 .catch를 사용해 에러의 원인을 받아올 수 있음
에러를 받을 때는 .then이 아니라 .catch를 사용할 것!
페어분 말씀으로는 .catch는 .then의 첫 번째 인자로 undefined를 받아서 사용하는 것과 동일하다고 하셨는데 찾아보니 .then의 첫 번째 콜백함수 내부에서 오류가 나는 경우 오류를 제대로 잡아내지 못한다고 나와있음

Promise.all()

const readAllUsers = () => {
  // TODO: Promise.all을 이용해 작성합니다
  return Promise.all([getDataFromFilePromise(user1Path), getDataFromFilePromise(user2Path)])
  .then(([user1, user2]) => {
    return '[' + user1 + ',' + user2 + ']'
  })
  .then((ans) => {
    return JSON.parse(ans)
  })
}

Promise.all()안에 들어갈 인자인 배열 안에 promise 객체를 넣어주고 response인자를 통해 배열 다루듯 활용

Async & Await

이 함수는 비동기적으로 작동하는 함수라는 것을 표현하는 async와 Promise 객체를 리턴하는 함수나 변수에 붙는 await을 사용해서 콜백함수나 .then을 사용하지 않고도 비동기적으로 코드를 짤 수 있음 (비동기적으로 사고할 필요를 줄여줌)
Promise에서 .then에서 에러가 나면 찾아볼 수가 없음
에러핸들링 할때 예외처리가 용이함

fs 모듈

fs.readFile(filename, [options], callback)

filename의 파일을 [options]의 방식으로 읽은 후 callback으로 전달된 함수를 호출 (비동기적)

const getDataFromFile = function (filePath, callback) {
  // TODO: fs.readFile을 이용해 작성합니다
  fs.readFile(filePath, 'utf-8', (err, data) => {
    if (err) {
      callback(err, null)
    }
    else {
      callback(null, data)
    }
  })
};

비동기적 읽기에서 callback으로 전달된 함수는 매개변수로 err와 data를 가짐
파일로부터 읽은 데이터 내용이 매개변수 data로 전달되어 함수 내에서 접근가능해짐
에러가 존재할 경우 콜백함수의 첫 번째 인자로 err를 넣어주고 에러가 없으면 null을 넣음
(콜백함수의 첫 번째 인자는 에러자리?)

profile
개발꿈나무

0개의 댓글