Async
1. 동기와 비동기
동기(synchronous)
특정 코드의 실행이 완료될 때까지 기다리고 난 후, 다음 코드를 수행하는 것
비동기(asynchronous)
특정 코드의 실행이 완료될 때까지 기다리지 않고, 다음 코드들을 수행하는 것
2. 비동기 JavaScript (Timer API)
setTimeout(callback, millisecond)
일정 시간 후에 함수를 실행
parameter: 실행할 콜백 함수, 콜백 함수 실행 전 기다려야 할 시간 (밀리초)
return 값: 임의의 타이머 ID
clearTimeout(timerId)
setTimeout
타이머를 종료parameter: 타이머 ID
return 값: 없음
setInterval(callback, millisecond)
일정 시간 간격을 가지고 함수를 반복적으로 실행
parameter: 실행할 콜백함수, 반복적으로 함수를 실행시키기 위한 시간 간격 (밀리초)
return 값: 임의의 타이머 ID
clearInterval(timerId)
setInterval
타이머를 종료parameter: 타이머 ID
return 값: 없음
3. Callback
비동기로 코드를 제어하는 방법 중 하나는
callback
함수 활용그러나, 코드가 길어질수록 복잡하고 가독성이 낮아지는 callback Hell 발생
4. Promise
new Promise
Promise
는 class이기에new
키워드를 통해Promise
객체를 생성Promise
는 비동기 처리를 수행할 콜백함수를 인수로 받는데, 이 콜백함수는resolve
,reject
함수를 인수로 전달받음Promise
객체가 생성되면 콜백함수는 자동으로 실행됨코드가 잘 처리되었다면
resolve
함수를 호출하고, 에러 발생 시reject
함수를 호출
Promise 객체의 내부 프로퍼티
new Promise
가 반환하는 Promise 객체는state
,result
내부 프로퍼티를 가짐다만, 직접 접근할 수 없고
.then
,.catch
,.finally
메소드 사용해 접근 가능
State
기본 상태는
pending
. 비동기 처리를 수행할 콜백함수가 잘 작동했다면 →fulfilled
로 변경, 에러 발생 시rejected
Result
기본 상태는
undefined
비동기 처리를 수행할 콜백함수가 잘 작동하여resolve(value)
호출되면 → value로, 에러 발생해reject(error)
호출되면 →error
로 변경
Then
콜백함수에 작성했던 코드들이 잘 처리되었다면
resolve
함수 호출 →.then
메소드로 접근 가능.then
안에서 리턴한 값이Promise
라면Promise
내부 프로퍼티result
를 다음.then
의 콜백함수의 인자로 받아옴Promise
가 아니라면 리턴한 값을.then
의 콜백함수 인자로 받아올 수 있음
Catch
콜백함수에 작성한 코드의 에러 발생 시
reject
함수를 호출하고.catch
메소드로 접근 가능
Finally
콜백함수에 작성한 코드들이 정상 처리 여부와 관계 없이
.finally
메소드로 접근 가능
Promise Chaining
비동기 작업을 순차적으로 진행해야 하는 경우
Promise all()
여러 개의 비동기 작업을 동시에 처리하고 싶을 때 사용
인자로는 배열을 받으며, 해당 배열에 있는 모든
Promise
에서 콜백함수 내 작성했던 코드들이 정상적으로 처리되었다면 결과를 배열에 저장해 새로운Promise
를 반환더불어, 인자로 받은 배열의
Promise
중 하나라도 에러 발생 시, 나머지Promise
state와 상관없이 즉시 종료
5. Async, Await
async
,await
로 복잡한Promise
코드를 간결하게 작성 가능함수 앞에
async
사용하고,async
함수 내에서만await
키워드 사용하기: 이렇게 작성된 코드는await
키워드가 작성된 코드가 동작한 후에 → 다음 순서의 코드 동작
6. fetch API
fetch API
특정 URL로부터 정보를 받아오는 역할
이 과정이 비동기로 이루어지기에 경우에 따라 다소 시간이 걸림
7. Axios
fetch API와 비슷한 역할을 하는 라이브러리
브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리
Fetch API보다 사용이 간편하면서 추가적인 기능들이 포함됨
써드파티 라이브러리로 설치가 필요함
자동으로 JSON 데이터 형식으로 변환됨
GET 요청
POST 요청
Last updated