-
[js] callback, promise, async & await카테고리 없음 2023. 3. 28. 17:32
1. Js 특징 : 동기처리(Synchronous) ( vs 비동기(Asynchronous))
1) 동기처리 와 비동기 처리
Js를 예를 들어 설명해보자.
Js는 싱글 스레드 언어로, 코드가 작성된 순서대로 작업을 처리한다.
console.log("a") console.log("b") console.log("c") //a b c
즉, 이와같이 여러개의 작업이 있을 때 앞의 작업이 끝나길 기다린 후, 뒤를 순서대로 실행하는 방식 을 동기적 방식이라고 하는 것이다.
그리고 이러한 와중에 다른 작업이 불가능하도록 막는 것을 블로킹 이라고 한다.
그리고 이와 반대되는 것이 비동기 처리이다.
즉, 여러개의 작업을 동시에 실행시키는 것이라고 말할 수 있다.
그렇기에 동기처리는 직렬로, 비동기처리는 병렬로 처리가 일어나는 것이라 생각하면 편하다.
Js가 동기처리방식이라고는 했지만, 만약 중간에 setTimeout 처럼 잠깐 기다려야하는 함수가 있을 땐 어떨까?
이럴 때 Js는 잠깐 기다려야하는 함수를 일단 건너뛰고 밑으로 내려간다. 비동기 처리가 일어나는 것이다.
콜백을 사용할 때 이러한 방식으로 계속 넘기는건데, 이렇게 계속 넘기면 코드를 이해하기도 힘들고 좀 더럽게 작성이 될 가능성이 높다. (콜백지옥)
2. Promise
이를 해결하기 위해 Promise 가 나왔다. Promise 객체는 비동기 작업이 얻게될 미래의 완료 / 실패와 그 결과값을 나타낸다.
즉, Promise를 사용하면 비동기 메세드에서 마치 동기 메서드처럼 반환을 할 수 있는데, 이 때 반환은 최종 결과를 반환하는 것이 아니라 미래의 어떤 시점에 결과를 제공하겠다는 '약속'을 반환하게 되는 것이다.
이런 Promise는 세 가지의 상태를 가질 수 있다.
1) 대기(Pending) : 이행하지도, 거부하지도 않은 초기 상태
2) 이행(fulfilled) : 연산이 성공적으로 완료됨
3) 거부(rejected) : 연산이 실패함
즉, 어떤 함수가 Promise 객체를 반환한다는 말은 그 함수는 비동기적으로 동작을 하며, 반환한 Promise 객체를 통해 비동기 처리 결과를 then과 catch로 이용할 수 있게 만들겠다는 것이다.
이렇게 Promise를 사용할 수도 있지만, 더 편리한 것이 나왔다.
3. Async, Await
Async function 선언은 AsyncFunction 객체를 반환하는 하나의 비동기적 함수를 정의하며,
Async를 붙인 함수는 반환값이 자동으로 Promise 가 된다.
이런 Async 함수에는 awit 식이 포함될 수 있으며, 이 식은 async 함수의 실행을 일시 중지하고 전달된 Promise 의 해결을 기다린 다음, async 함수의 실행을 다시 시작하고 완료 후 값을 반환한다.
여기서 주의할 점은, await 키워드는 async 함수에서만 유효하다는 것! async 함수의 본문 외부에서 사용하면 SytaxError 가 발생한다.
4. 참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function
async function - JavaScript | MDN
async function 선언은 AsyncFunction객체를 반환하는 하나의 비동기 함수를 정의합니다. 비동기 함수는 이벤트 루프를 통해 비동기적으로 작동하는 함수로, 암시적으로 Promise를 사용하여 결과를 반환
developer.mozilla.org
https://tech-monster.tistory.com/180
[javascript] 동기 & 비동기 / promise, async, await 사용하기
필자는 최근에 회사에서 cals studio라는 node.js기반 프레임워크를 이용해서 AWS lambda 서버에 코드를 올리고 있다. 사실 그렇다는데 나는 뭐 그런가 보다 하고 이것을 내가 처음부터 직접 만든게 아
tech-monster.tistory.com
자바스크립의 콜백 함수 – 자바스크립트에서 콜백 함수가 무엇이고 어떻게 사용하는지 알아
여러분이 프로그래밍과 익숙하시다면, 함수가 무엇이고 어떻게 사용하는지 알고 계실 겁니다. 그러나 콜백 함수가 뭔지 정확히 알고 있나요? 콜백 함수는 자바스크립트에서 중요한 파트 중 하
www.freecodecamp.org