자바스크립트는 싱글 스레드 기반의 동기적인 언어입니다.
처음 만들어졌을 때는 웹 페이지에서 간단한 상호작용을 처리하는 것이 주목적이었기 때문에, 초기의 자바스크립트는 매우 단순하고 제한된 기능을 가지고 있었습니다.
console.log('First')
console.log('Second')
console.log('Third')
First
Second
Third
초기의 자바스크립트는 비동기 처리를 할 때 Callback 함수를 사용했습니다. 그러나 비동기 작업이 여러 단계에 걸쳐 이루어질 경우 복잡한 중첩 구조를 가지게 되어서 가독성이 좋지 않고 에러 처리를 하기 어려웠습니다.
getData(function(err, data) {
if (err) {
console.error('첫 번째 작업 실패', err);
return;
}
processData(data, function(err, processedData) {
if (err) {
console.error('데이터 처리 중 에러 발생', err);
return;
}
saveData(processedData, function(err) {
if (err) {
console.error('데이터 저장 실패', err);
return;
}
console.log('작업 완료');
});
});
});
그래서 ES6 이후에 순차적으로 생겨난 개념이 Promise 와 async/await 입니다.