블로킹(Blocking)
이라고 한다.A 작업 로드 시작 → 로드 완료 → 실행 → B 작업 로드 시작
비동기(Asynchronous)
가 있다.논블로킹(Non-blocking)
이라고 한다.A, B 작업 로드 시작 → B 작업 로드 완료 → B 작업 시작
(A 작업의 시작을 기다리지 않는다.)
callback
, promise
, async/await
문법을 이용하여 구현 할 수 있다.이벤트 핸들러
→ 클릭, 키보드 입력, 페이지 로딩 등타이머
→ 타이머 API자원 요청 및 응답
→ 서버에 요청하는 경우 동기적이라면, 서버에 몰리는 경우 한참 기다려야 한다...클라이언트
가 서버에 자료를 요청하고, 작업을 멈추고 기다린 뒤 서버의 response
가 오고 나서야 다음 작업을 재개한다.response
가 오는 경우에 해당 자료를 이용한 다른 작업을 실행한다.동기적
일 경우, 일부 컴포넌트의 크기가 크다면 그 뒤의 컴포넌트들이 아예 로딩되지 않을 것이다.비동기
를 사용함으로써, 크기가 작은 컴포넌트들이 우선적으로 로드되어 작동하게 된다.비동기
를 컨트롤하여 원하는 순서대로 실행시키고 싶은 경우 사용 할 수 있다.const fn = (value, callback) => {
console.log(value)
callback
// 콜백함수를 인자로 받아 해당 콜백을 원하는 함수의 실행이 끝난 뒤 실행할 수 있다.
}
const runFn = () => {
fn("A", () => {
fn("B", () => {
fn("C", () => {})
})
})
}
callback hell
라고 한다.(으아아ㅏ앙악)
promise
나, async / await
이라는 더 사용성이 좋은 개념이 있으므로 참고만!// 사용 예시
let downloadData = (callback) => {
if(whenSucess) {
callback(null, correctData)
}
if(whenFail){
callback(wrongData, null)
}
} // 데이터를 받고 각 데이터의 옮고 그름을 비교하여, 콜백함수에 인자를 위처럼 전달한다.
downloadData = ((err, data) => { // 콜백함수의 인자를 받아 비교한다.
if(err) { // 에러에 값이 있다면 아래를 실행시킨다.
console.log('this is err')
return;
}
else{ // err에 값이 없으면(null) 올바른 데이터를 반환한다.
return data;
}
})