[TIL]/*elice*/DAY17

박소정·2022년 5월 3일
0

이벤트 루프

자바스크립트 엔진은 비동기 처리를 제공하지 않는다.
대신, 비동기 코드는 정해진 함수를 제공하여 활용할 수 있다.
이 함수들을 API라고 한다.
비동기 API의 예시로 setTimeout, SMLHttpRequest, fetch등의 WebAPI가 있다.
node.js의 경우 파일 처리 API, 암호화 API등을 제공한다.

비동기 처리 모델

//타이머 비동기 처리
setTimeout(() => console.log('end'), 1000)
setInterval(() => console.log('interval', 1000)
            
//네트워크 처리
fetch('https://blah.com')
	.then(() => console.log('success'))
	.catch(() => console.log('fail'))

API모듈은 비동기 요청을 처리 후 태스크 큐에 콜백 함수를 넣고,
자바스크립트 엔진은 콜 스택이 비워지면, 태스크 큐의 콜백 함수를 실행한다.

Promise API

Promise API는 비동기 API로 태스크 큐가 아닌 잡큐(job queue)를 사용한다.
잡 큐는 태스크 큐보다 우선순위가 높다.

Promise

비동기 작업을 표현하는 자바스크립트 객체로 비동기 작업의 진행, 성공, 실패 상태를 표현한다.
비동기 처리의 순서를 표현할 수 있다.

Promise 생성자

let promise = new Promise((resolve, reject) => {
  if(Math.random()<0.5){
    return reject("fail")
  }
  resolve(10);
 })

new Promise(callback)
callback함수는 (resolve, reject)두 인자를 받는다.
Promise가 성공했을 때 resolv를, 실패했을때는 reject를 호출한다.

Promise.all

Promise.all([
  promise1,
  promise2,
  promise3
])
  .then(values => {
  	console.log("모두 성공 : " . values)
})
  .catch(e => {
  	console.log("하나라도 실패 : ", e)
})

Promise.all은 Promise의 배열을 받아 모두 성공시 각 Promise의 resolved값을 배열로 반환한다.
하나의 Promise라도 실패할 시, 가장 먼저 실패한 Promise의 실패 이유를 반환한다.

0개의 댓글