Promise 무한반복으로는 브라우저를 죽일 수 있을까?
Promose로 전달된 call back 은 micro task queue로 전달된다.
이번 실험의 결과에서 주목해야할 점은 버튼을 누르면 뭔가 아리까리하게 되는듯 마는듯 하면서 안되는것!!
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
button:hover {
background-color: pink;
cursor: pointer;
}
</style>
</head>
<body>
<button>Continue with promise</button>
<script>
function handleClick() {
console.log('handleClick');
Promise.resolve(0)
.then(() => {
console.log('then');
handleClick();
});
}
const button = document.querySelector('button');
button.addEventListener('click', (event) => {
handleClick();
});
</script>
</body>
브라우저는 죽는다 대체 setTimeout과 차이점은 뭘까?
setTimeout에 등록된 callback 은 Task Queue에
promise에 등록된 callback 은 Micro Task Queue에 전달된다.
Micro Task Queue의 특징은 큐가 비워질때까지 EVENT LOOP가 블록상태에 빠진다는것. 위의 코드는 Promise 의 결과로 Micro task queue에 callback 이 전달되는 속도가 JS Call Stack에서 실행되는 속도보다 빨라서 문제가 브라우저가 죽는것!
Last updated
Was this helpful?