> 비동기처리란
- 특정 코드 연산이 끝날 때까지 기다리는 것이 아니라, 멈추지 않고 다음 코드를 실행하는 특성
- 서버에서 응답을 언제 줄 지 모르기 때문에 다양한 요청을 비동기로 처리
> 문제점
비동기 처리 방식은 효율적이지만 때로 문제를 일으킴
- API에서 응답을 받고 처리해준다던지
- 페이지가 완전히 로드되기 전에 응답을 받아와 빈 값을 리턴하는 경우가 있었음
> 해결방법
콜백함수 사용
그러나 콜백함수는 중첩될 경우 가독성이 떨어지고 로직 변경도 어려움
/// 예시 $.get('url', function(response)) { parseValue(response, function(id) { auth(id, function(result) { display(result, function(text) { console.log(text)\; }); }); }); });
Promise 사용
Async 사용
위 콜백 중첩을 분리하더라도 2, 3번 방법이 낫다.
> Promise란?
Promise
객체는 비동기 작업이 맞이할 미래의 결과 값의 대리자- 동기 메서드처럼 값을 반환
- 최종 결과를 반환하는 것은 아님
- 이행 또는 거부됐을 경우 setteld(처리)되었다고 표현
> Promise의 3가지 상태
Pending
new Promise(function(resolve, reject){});
메서드를 호출한 상태
Fulfilled
- 펜딩 상태에서 콜백함수의 resolve를 실행하게 되면 이행 상태가 된다.
- 이때
getSomething().then(function(){});
과 같이 then()을 이용해 값을 받을 수 있게 된다.
Rejected
reject
를 받게 되면 실패 상태가 되며getSomething().then().catch(function(err){});
에러를 인자로 받을 수 있다.catch()
가 아닌then()
의 두번째 인자로 에러를 처리해도 되지만 에러를 못잡는 경우와 가독성을 위해 가급적catch()
로 처리해주자.
참고- mdn, 캡틴판교님 블로그
'개발 > 자바스크립트' 카테고리의 다른 글
[타입스크립트] CRA를 활용하지 않은 TS프로젝트 생성 (0) | 2022.08.26 |
---|---|
[타입스크립트] Call Signatures (0) | 2022.08.09 |
null undefined의 차이 (0) | 2022.05.16 |
AWS 배포 중 이미지, 비디오 리소스를 받아오지 못하는 경우 (0) | 2022.04.14 |
[NextJS] Fast refresh가 작동하지 않을 때 (React 18) (0) | 2022.03.26 |