콜백헬

콜백함수를 리턴값으로 받고 어떠한 작업을 진행할 때 콜백함수가 리턴되기 전에 리턴값을 사용하는 작업이 시작될 수 있다. 콜백함수의 진행 방법이 콜백함수호출→콜백함수 이벤트 큐로 이동→콜스택 진행→콜백함수의 타이머 경과 → 콜스택 여부 확인 → 콜스택이 없을 시 진행 그렇기에 콜백함수의 타이머가 끝났더라도 콜스택에 다른 작업이 쌓여있다면 나중에 실행된다.

setTimeout함수는 비동기함수 비동기 처리 함수의 콜백 함수는 해당 이벤트(timer 함수의 tick 이벤트, XMLHttpRequest의 readystatechange 이벤트 등)가 발생하면 태스트 큐(Task queue)로 이동한 후 호출 스택이 비어졌을 때, 호출 스택으로 이동되어 실행된다. setTimeout 함수는 비동기 함수이므로 콜백 함수가 실행될 때까지 기다리지 않고 즉시 종료되어 호출 스택에서 제거된다.

이 뜻은 만약 setTimeout 함수가 콜백함수를 실행 시켰다면 계속 켜져있어야 하는데 그렇지 않고 콜백함수를 실행시키고 바로 콜스택에서 사라진다.

프로미스

Promise 생성자 함수를 통해 인스턴스화한다. Promise 생성자 함수는 비동기 작업을 수행할 콜백 함수를 인자로 전달받는데 이 콜백 함수는 resolve와 reject 함수를 인자로 전달받는다.

// Promise 객체의 생성
const promise = new Promise((resolve, reject) => {
  // 비동기 작업을 수행한다.

  if (/* 비동기 작업 수행 성공 */) {
    resolve('result');
  }
  else { /* 비동기 작업 수행 실패 */
    reject('failure reason');
  }
});

Promise는 비동기 처리가 성공(fulfilled)하였는지 또는 실패(rejected)하였는지 등의 상태(state) 정보를 갖는다.

Untitled