비동기 함수란 호출부에서 실행 결과를 기다리지 않아도 되는 함수이다.(반대의 경우 실행 결과가 리턴될 때 까지 기다려야 하는 함수인 동기 함수도 있다.)
비동기 함수의 이러한 Non-blocking 때문에, 자바스크립트처럼 싱글 쓰레드 환경에서 실행되는 언어에서 광범위하게 사용된다.
비동기 함수를 사용하면 로직을 순차적으로 처리할 필요가 없기 때문에 동시 처리에서도 동기 함수 대비 유리하다.
but
자바스크립트 프로젝트가 점점 더 복잡해지면서 최근에는 콜백 함수를 인자로 넘겨서 비동기 처리를 하는 스타일을 피하는 추세이다
콜백 함수를 중첩해서 사용하게 되면 계속해서 코드를 들여쓰기 해야하고 그러다보면 코드 가독성이 현저하게 떨어지게 되기 때문이다.
Promise 지금 당장으 없지만 가까운 미래에서 얻을 수 있는 어떠한 데이터에 접근하기 위한 방법을 제공해준다.
Non-blocking 코드를 지향하는 자바스크립트에서는 비동기 처리가 필수이다!
< Promise 생성 방법 >
Promise 객체는 new
키워드와 생성자를 통해서 생성할 수 있다. 이 생성자는 함수를 인자를 받는데, 이 함수 인자는 resolve
와 reject
라는 2개의 함수형 파라미터를 가진다.
구문
const promise = new Promise(function(resolve, reject) { ... } );
function returnPromise() {
return new Promise((resolve, reject) => { ... } );
}
생성자의 인자로 넘어가는 함수 인자의 바디에서는 resolve()
나 reject()
함수를 정상 처리하고 예외 발생 여부에 따라 적절히 호출해야 한다. resolve()
함수의 인자로는 미래 시점에 얻게될 결과를 넘겨주고, reject()
함수의 인자로는 미래 시점에 발생할 예외를 넘겨준다.
실제로 코딩을 할 경우에는 Promise를 직접 생성해서 리턴해주는 코드 보다는 라이브러리 함수를 호출하여 리턴 받은 Promise 객체를 사용한다.
대표적으로 REST API를 호출할 때 사용되는 부라우저 내장 함수인 fetch()
가 대표적이다. fetch()
함수는 API의 URL을 인자로 받고, 후에 얻게될 API 호출 결과를 Promise 객체로 리턴해준다.
Promise 객체의 then()
메소드는 결과값을 가지고 수행할 로직을 담은 콜백 함수를 인자로 받습니다. 그리고 catch()
메서드는 예외 처리 로직을 담은 콜백 함수를 인자로 받는다.
오늘 코드스테이츠 학습시간에는 하루종일 고차함수 리뷰와 그에 주어진 과제를 진행하였었다. 오늘 매칭된 페어는 잘하시는 분을 만났는데 정말 좋은 분과 페어를 진행하게 된 것 같아서 시작부터 기분이 좋았다. 하지만 그렇지 못한 과제를 풀면서 멘탈이 나갔지만 페어분께서 내가 막히는 부분은 힌트를 주시면서 풀어나갔다. 종료직전에 챕터에있는 비동기도 공부를 조금 해봤는데 역시... 비동기는 학습이 더 필요할 것 같다... 비동기도 전체적으로 어려워보여서 걱정이많았지만 좌절하지말고 주말에 더 학습을 해봐야 할 것 같다 화이팅...!