setTimeout 실행순서에 대해..
본문
다시 도움을 요청합니다. 죄송합니다.
버튼을 누르면 메시지가 1-2초 동안 만 보였다 사라지게 만들고 싶습니다.
그래서 setTimeout 을 사용했는데, 문제는 메시지가 사라진 뒤에 아래쪽 코드가 실행되어야 하는데, 먼저 실행됩니다.
아래 코드를 보면 [2초후 사라집니다] 메시지가 사라진 다음에 alert()가 떠야 하는데, alert가 먼저 뜹니다.
setTimeout 이 끝난 뒤에 실행하려면 어떻게 하지요?
<button onclick="autoMsg('2초후 사라집니다.')">Fade</button>
<div id="msg" style="display:none; position:absolute; top:30%; left:50%"></div>
<script>
function autoMsg(txt) {
var msg = document.getElementById('msg');
msg.innerHTML = txt;
msg.style.setProperty('display', 'block');
setTimeout(function(){msg.style.setProperty('display','none');},2000);
//-- 글자가 사라진 후에 아래 코드가 실행되게??
alert('next code');
}
</script>
위 문제로 이틀 끙끙대다 아래와 같이 중간에 while 반복문으로 2초간 헛돌다 내려가게 해 보았습니다.
그런데 이렇게 하니까 2초 뒤에 alert()가 실행되기는 하는데, 또 이상하게 메시지가 아예 보이지가 않네요...ㅠ
function autoMsg(txt) {
var msg = document.getElementById('msg');
msg.innerHTML = txt;
msg.style.setProperty('display', 'block');
var seconds = Date.now() + 2000;
while (Date.now() < seconds) {};
msg.style.setProperty('display','none')
//-- 글자가 사라진 후에 아래 코드가 실행되게??
alert('next code');
}
도와 주세요.
되도록 가장 쉬운 방법으로 알려 주시면 감사하겠습니다.
답변 2
setTimeout(function(){msg.style.setProperty('display','none'); alert('next code'); },2000);
https://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep
https://www.daleseo.com/js-sleep/
위 링크 참고해보세요.
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
function autoMsg(txt) {
var msg = document.getElementById('msg');
msg.innerHTML = txt;
msg.style.setProperty('display', 'block');
setTimeout(function(){msg.style.setProperty('display','none');},2000);
//-- 글자가 사라진 후에 아래 코드가 실행되게??
sleep(2200).then(() => {
alert('next code')
});
}
덕분에 하나 배워가네요~^^