Part II - fs module # 2

이건우·2021년 4월 26일
0

Asynchronous & Promise

목록 보기
7/13

문제

  • "Promise 형태로 리턴되어야 합니다"
  • "then 블록을 통하여 파일 내용이 전달되어야 합니다"
  • "에러가 발생할 경우, catch 블록을 통하여 에러 객체가 전달되어야 합니다"

내접근

당연히 then을 써야한다 생각했다. 엄청 표류하였다.
"then 블록을 통하여 파일 내용이 전달되어야 합니다"
이 말을 듣고, then을 써야할 궁리만 생각했었다 .

const getDataFromFilePromise = filePath => {
   return new Promise((resolve,reject)=>{
    fs.readFile(filePath, 'utf8', (err,data) => {
     .then((data) =>{
     	console.log(data
     })
     .catch(err)
    });
   }) 
  
};

참고는 정말 다양히 하였다 .

function getData() {
  return new Promise(function(resolve, reject) {
    $.get('url 주소/products/1', function(response) {
      if (response) {
        resolve(response);
      }
      reject(new Error("Request is failed"));
    });
  });
}

// 위 $.get() 호출 결과에 따라 'response' 또는 'Error' 출력
getData().then(function(data) {
  console.log(data); // response 값 출력
}).catch(function(err) {
  console.error(err); // Error 출력
});

https://joshua1988.github.io/web-development/javascript/promise-for-beginners/

이곳에서 '프로미스 코드 - 쉬운 예제' 를 보면서 생각도 했었다가 ,
reject(new Error("Request is failed"));
이 부분이 매우 걸려, 난감해했다.

코드의 결과

일단 아무것도 통과시키질 못한듯 싶다. 오류였다. 사실 then, catch 이부분을 마치
조건문의 true/false의 결과 처럼 이용하려 했었다 . 그리고 그것을 기대 하였다만,
내 생각만큼 제대로 작동해 주질않았다. 이 부분 보충학습이 필요한 시점일까 ?

정확한 코드

const getDataFromFilePromise = filePath => {
   return new Promise((resolve,reject)=>{
    fs.readFile(filePath, 'utf8', (err,data) => {
      if (err) {
        reject(err,null) // 에러를 던집니다.
       } else{
         resolve(data, null)
       }
    });
   }) 
  
};

결과는 이렇다. 사실 페어님도 나랑 같은난관에 봉착하셨다.
그리고, resolve에 한번 전 문제처럼 같은 형식으로 넣어봤다고 한다.
그러더니 문제가 풀렸다.

한번 최대한 비슷한 유형의 문제가있다면 한번 시도해볼만한 것은 어떨까 ?

profile
내가 느낌만알고 한줄도 설명할줄 모른다면 '모르는 것'이다.

0개의 댓글