const btn = document.querySelector('button');
btn.addEventListener('click', () => {
alert('You clicked me!');
let pElem = document.createElement('p');
pElem.textContent = 'This is a newly-added paragraph.';
document.body.appendChild(pElem);
});
JS는 single threaded이기 때문에 alert창에서 OK를 누를 때까지 textContent가 나타나지 않는다. Blocking, 사용자의 입력을 처리하느라 웹 앱이 프로세서에 대한 제어권을 브라우저에게 반환하지 않는 현상이다.
외부 디바이스에서 어떤 종류의 리소스에 액세스하거나 가져오는 기능 등에 많이 사용한다. 예를 들어, 서버에서 이미지를 가져올 때 네트워크 환경, 다운로드 속도 등의 영향으로 delay가 생기면, 그 이미지를 이용해야만 하는 코드들에서 에러가 나기 때문이다.
Main thread: Task A Task B
Promise: |__async operation__|
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts