callback/promise 의 개념

JBoB·2023년 1월 17일

Promise 란?

  • 비동기를 처리할 수 있도록 자바스크립트안에 내장되어 있는 객체이다.
  • 👀비동기 처리방식이란?
    • 어떠한 데이터 통신을 위해 ‘요청’을 하였을 때, 어떠한 요청에 대한 ‘응답'을 기다리지 않고 다음 코드가 수행되는 처리방식을 의미한다
  • 👀동기 처리 방식이란?
    • 어떠한 데이터 통신을 위해 ‘요청'을 하였을 때, 어떠한 요청에 대한 ‘응답'을 받을 때까지 기다리다가 완료된 뒤 다음 코드가 수행되는 처리방식을 의미한다

Promise 의 요청 상태

  • 대기(pending): 이행하지도,거부하지도 않은 초기 상태.

  • 이행(fulfilled): 연산이 성공적으로 완료됨.

  • 거부(rejected): 연산이 실패함.

    출처:https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

    pending 상태에서는 객체 생성을 하고,그 객체 내에서 통신을 하였을 때, 성공을 하게 되면 fulfilled 상태를 진행하고 실패를 하게 되면 rejected 상태를 진행한다.

    이제 이 요청 상태의 개념에 들어가기 전에 앞서 비동기처리 방식의 콜백함수를 이해하고 넘어가자.

    콜백 함수란?

  • 특정 함수 내에서 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 지칭한다.

  • 파라미터로 전달 받은 함수

  • 파라미터로 콜백함수를 전달받고 함수 내부에서 필요할 때 콜백함수를 호출할수 있다.

1번 예제 코드

function add (x, y) () {
 return x + y
} 
  • add 함수에서는 인자로 x,y가 들어갑니다. 여태까지 배워온 것들을 보면 문자열,숫자열,배열,객체 등의 데이터의 인자를 넣고 있었습니다. 하지만 함수도 들어갈수 있다는걸 알 수 있습니다.
function add (x, y, callback){
	let result = x * y
	callback(result)
}

function result (data) {
	console.log(data, "콜백함수 실행")
}

add(5, 10, result)
  • add 함수에는 인자로 x, y, callback이 들어가고, callback에는 함수가 들어갑니다.

그리고 add 함수를 실행시키면 add 함수 안에서 인자로 들어간 다른 함수가 실행됩니다.

이럴 때 add 함수의 인자로 사용된 result 함수를 callback 함수라고 부릅니다.

어떤 이벤트에 호출되어지는 함수는 어떤 경우인가?

  • 코드에서 이벤트는 “어떤 일이 발생했다”로 받아들이면 좋다.
    스마트폰에서 화면을 누르는것도 이벤트이고 새 브라우저 창을 키는 것도 이벤트이다.
  • 이벤트 콜백 함수 중에 가장 대표적인것이 onClick, onChange 이다.
<button onClick={handleClickFunction}></button>
  • button을 클릭하면 onClick 함수가 실행되고 그 안에 있는 handleClickFunction이라는 함수가
    실행하게 됩니다.
  • 함수의 인자로 함수를 받고 있기 때문에 handClickFunction 을 콜백함수로 부릅니다.

Callback 함수의 종류

Callback 함수는 2가지로 나눌수 있습니다.

1.동기적 함수

2.비동기적 함수

비동기적 Callback

비동기적 콜백 함수의 가장 좋은 예는 settimeout 입니다.

비동기적 함수는 결과를 기다리지 않고 다음 코드를 실행하는 과정을 말합니다.

function Test () {
	console.log("3초 기다리기")
}

setTimeout(Test,3000);
console.log('이건 바로 실행')

위의 코드를 실행시킵니다.

아래처럼 결과가 나옵니다.

"이건 바로 실행"
"3초 기다리기"

분명 setTimeout()을 먼저 실행시켰지만, 아래있는 console.log()가 먼저 결과창에 보입니다. 이러한 이유는 자바스크립트 코드가 비동기적으로 코드를 실행시키기 때문입니다.

참고:
https://satisfactoryplace.tistory.com/18
https://www.notion.so/dingco/6-Node-8579c831bd66403f93ad01b08c9db639#5f7c3abc2c2f468fba4b82eb9fab05df

profile
간절하고 치열하게 살자

0개의 댓글