[Node.js] 2-2. 자바스크립트 비동기 처리

2022. 4. 6. 23:13Node.js

SMALL

@ 백견불여일타 - Node.js 서버 만들기 교재를 참고하였습니다. @

 

1. 콜백 함수

 - 콜백 : 나중에 실행되는 코드

 - 콜백 함수 : 콜백에서 매개변수로 들어가는 함수

 (JS는 일급 객체로, 함수를 다른 함수의 매개변수, 반환값, 변수 안에 할당 가능)

@ 비동기 처리

@ 동기 처리

 

@ 사용자 정의 함수 동기 처리

*setTimeout() : 웹 브라우저에서 제공하는 API

- 두번째 인자의 숫자만큼 시간이 지난 후 비동기 처리가 되므로 hello가 나중에 찍힌다.

*** 자바스크립트 내부에서 처리되는 연산 -> 동기

                       외부에서 처리되는 연산 -> 비동기 ( 서버에서 데이터 가져오기, 타이머 등의 외부 API 등)

 

 

2. Promise (콜백지옥탈출) : 요청에 대해 응답이 준비되었을 때 알림을 주는 알리미 역할

 

2-1. 일반적인 비동기 함수

2-2. 동기적 처리

2-3. Promise를 이용한 동기적 처리

 - then은 체이닝으로 사용 가능

 - then()을 쓸 경우 return은 필수

 

3. async/await

 - ES7.6 부터 사용할 수 있는 문법

 - Promise의 단점 보완(가독성)

 - Node.js 8 버전부터 완벽 지원

 - 비동기 코드의 겉모습과 동작을 동기 코드와 유사하게 만들어준다.

@ 비교

@ async/await 사용 예

 - async 키워드를 붙인 함수에서 lock을 걸고 싶은 부분에  await 붙이기

 - 그 밑의 구문은 끝날 때까지 실행되지 않음

 

4. 사용자 정의 오류

4.1 일반적인 예외 처리

4.2 비동기 예외 처리 3가지

- 비동기 작업은 작업 큐에서 대기했다가 콜 스택이 비게 되면 콜 스택으로 들어와 실행된다.

try catch로 잡을 수 없음

 

 @ 4.2.1 Promise.catch() 이용

 - 원래 함수의 결과를 받는 것이 아니라 이전 catch 구문의 실행 상태를 받기 때문에 이때는 체이닝 불가

 - 반환하는 객체가 같은 경우 가능

 

 @ 4.2.2 Promise.then() 이용

 - 성공한 경우, 실패한 경우로 나눠서 처리 가능

 @ 4.2.3 async/await() 이용

- async 함수 사용 시, Promise와 동일

- await 사용 시 try catch 또는 .catch 사용 (예외가 발생되는 시점이 try가 감싸고 있는 시간과 동일하기 때문)

- 단, wait 함수가 resolve 할 때는 catch하지 않으므로 resultwaitreslove가 그대로 들어간다.

- wait 함수가 reject 할 때, catch 구문에서는 아무것도 반환하지 않으므로 resultundefined가 되어 버린다.

try catch 는 Promise에 대한 오류만 잡는다.

- 오타 or 문법 오류이면서 Promise를 반환하는 함수는 .catch 이용​

 

 

LIST

'Node.js' 카테고리의 다른 글

[Node.js] 2-1. 자바스크립트 기초, 기본 문법  (0) 2022.04.06
[Node.js] 1. 기초 개념  (0) 2022.04.06