[TIL] Callback & Promise

김민성·2021년 3월 20일
0

Achievement Goals

어떤 경우에 중첩된 callback이 발생하는지 이해할 수 있다.

callback 함수는 이름 그대로 나중에 호출되는 함수를 말합니다. 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 말합니다. 동기적으로 실행되는 여러 함수 안에서 콜백함수를 실행하게 되면 순서대로 함수를 실행해도 setTimeOut같은 콜백함수를 실행한다면 비동기적으로 함수가 실행되게 만들 수 있습니다. 그리고 함수안에서 콜백함수를 실행하고 그 콜백함수안에서도 콜백함수를 실행하게된다면 이러한 방식이 10번, 100번, 1000번 일어나게 된다면 콜백 지옥에 빠지게 됩니다.

중첩된 callback의 단점, Promise 의 장점을 이해할 수 있다.

중첩된 콜백이 엄청 많이 생긴다면 콜백 지옥에 빠지고 콜백 지옥은 가독성이 떨어지기 때문에 효율적으로 좋지 않습니다. 이를 방지하기 위해서 프로미스를 사용하여 콜백 지옥에서 벗어날 수 있습니다.

Promise 사용 패턴과 언어적인 특징들을 이해할 수 있다.

new Promise를 이용해서 Promise객체를 만들고 resolve, reject를 이용하여 리턴값을 출력합니다.

resolve, reject의 의미와, then, catch와의 관계를 이해할 수 있다.

파일을 받아오는 fs.readFile을 사용하여 파일을 불러올 경우 에러가 뜬다면 reject를 사용하여 에러값을 받아오고 .catch를 이용하여 출력합니다. 그리고 정상적으로 데이터를 받아온다면 resolve를 이용하여 받아오고 .then을 이용하여 출력합니다. .then을 이용하여 에러도 출력이 가능한 것 같습니다. 하지만 .catch를 사용하는 것이 정해진 룰인 것 같습니다!

Promise 에서 인자를 넘기는 방법에 대해 이해할 수 있다.

then, catch를 이용하여 데이터와 에러를 인자를 넘길 수 있습니다.

Promise의 세가지 상태를 이해할 수 있다.

대기(pending): 이행과 거부되기 전의 상태입니다.
이행(fulfilled): 연산이 성공적으로 완료되었을 때 상태입니다. resolve를 사용할 수 있습니다.
거부(rejected): 연산이 실패했을 때 상태입니다. reject를 사용할 수 있습니다.

Promise.all 의 사용법을 이해할 수 있다.

Promise.all(): Promise로 이루어진 배열 또는 반복자를 취하여 그 안에 들어있는 모든 Promise가 resolve된 뒤의 값들 또는 가장 먼저 reject된 Promise의 이유를 가진 Promise를 반환합니다.
여러 값들을 배열로 반환할 수 있습니다. 반환한 값들이 전부 fulfilled된 값들이라면 배열로 전부를 받아올 수 있습니다. 하지만 반환한 값 중 하나라도 rejected된 값이 있다면 rejected 값 하나만 반환 합니다.

Promise.race(): Promise로 이루어진 배열 또는 반복자를 취하여 가장 먼저 resolve된 Promise의 값 또는 가장 먼저 reject된 Promise의 이유를 가진 Promise를 반환합니다.
가장 먼저 받아오는 값을 반환합니다.

async/await keyword에 대해 이해하고, 작동 원리를 이해할 수 있다.

promise도 .then을 남발하게 된다면 promise hell이 생성될 수 있습니다. 이를 방지하기 위해서 promise 대신 async/await을 사용한다면 더욱 가독성이 좋고, promise hell 또한 방지할 수 있습니다.

async 함수 안에서만 await함수를 쓸 수 있습니다. new promise로 실행했던 함수들을 await로 대체하여 값을 바로 변수에 저장할 수 있습니다.

node.js의 fs 모듈의 사용법을 이해한다.

브라우저 환경과는 다르게 node.js 앱은 내 컴퓨터에서 직접적으로 실행되므로, 파일을 불러오거나 저장할 수 있습니다. node.js 에서는 파일을 읽는 비동기 함수를 제공하는데 그 중 하나로 fs(File System) 모듈을 활용하여 파일 열기, 파일 저장하기 등을 직접 구현할 수 있습니다.

profile
https://github.com/alstjd8826

0개의 댓글