07
27

Pinkie Promises! 올바르게 작동하거나 문제가 생겼을때 이렇게 하자는 '약속'같은 느낌이다.

1. Promise를 왜 쓰는가?

  • 비동기 함수들을 사용할 때 콜백 함수를 너무 많이 사용하면 복잡해서 읽기가 매우 힘들다.
  • 그래서 자바스크립트 내장 메서드 'promise'를 쓴다.

2. Producer

const proise = new Promise((resolve, reject) => {
	console.log('Doing Someting');
    setTimeout(() => {
		resolve('name')
    	reject(new Error('No Name'))
    }, 2000);
});
  • Promise는 class다. 그래서 일단 new를 사용해 만들게 된다.
  • resolve는 기능이 정상적으로 돌아가 마지막에 리턴할 함수 => 위의 예시에서 보이듯이 알맞은 인자를 전달해 준다.
  • reject는 기능이 돌아가다가 뭔가 오류가 생겼을 때 리턴할 함수

3. Consumers

  • 위에서 만들어 놓은 promise를 이용하는 방법이 된다.
promise
	.then((value) => {
		console.log(value); // name
	})
    .catch(error => {
		console.log(error)
    })
    .finally(() => {
		console.log('End')
	});
  • 위의 예시에서 then은 기능이 올바르게 작동한다면 나오게 될 기능을 하게 된다. 이때, value는 우리가 promise에서 resolve라는 콜백 함수로 전달한 값인 'name'이 전달되게 된다.
  • 만약 문제가 생긴다면? reject로 준 Error가 발생한다.
  • 문제가 발생해서  reject 콜백 함수가 사용되면, then이 promise를 다시 불러오게 되고, 그 불러온  promise에 catch를 다시 등록시키게 된다. 그러면 에러가 발생했을 때, 그것을 다시 잡아와 catch안에서 사용하게 된다. 이를 '체이닝'이라고 한다.
  • finally는 가장 마지막에 에러가 발생하든, 올바르게 실행되든 상관없이 실행된다.

4. fs.readFile()

  • 비동기적으로 파일을 읽어 온다는 의미이다.
fs.readFile('읽어올 파일의 경로', 'utf8(옵션, 대부분 utf8)', (err, data) => {
	if(err) {
		throw err; // 문제가 있다면 err를 던진다!
	}
	console.log(data); // 문제가 없다면 콘솔에 data를 입력한다.
})
  • 파일의 불러올 방식으로는 주로, 'utf8'이 사용된다. 사람이 읽을 수 있는 언어로 만들어주는 느낌이다.
  • 콜백 함수에서 err가 발생하지 않으면 자동으로 null이 되며, data에 내용이 전달된다.
COMMENT