์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- async
- slow and steady
- callback
- https://youtube.com/playlist?list=PLuHgQVnccGMA5836CvWfieEQy0T0ov6Jh&si=FTaYv8m21EhO-A2K
- prj
- Porject
- database
- ๋น๋๊ธฐ
- eport
- execCommand
- await
- mysql
- setTimeout()
- ํผํ
- object
- Project
- sql
- https://m.blog.naver.com/tt2t2am1118/221010125300
- json
- promise
- JS #ํ๋ก์ ํธ
- ๋๊ธฐ
- db
- ์ฐธ๊ณ ๋ธ๋ก๊ทธ
- js
- Import
- ajax
- addEventListener
- webpack
- ๊ฒ์
- Today
- Total
C-log
setTimeout์ ์ ๋น๋๊ธฐ์ธ๊ฐ? ๋ณธ๋ฌธ
#setTimeout์ ๋น๋๊ธฐ ํจ์์ ๋ํ์ ์ธ ํจ์์ด๋ค. ๊ทธ๋ ๋ค๋ฉด setTimeout์ ์ ๋น๋๊ธฐ ํจ์์ธ๊ฐ?
setTimeoutํจ์๋ ์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋ค. ์ผ์ ์๊ฐ์ด ์ง๋๋ ๋์ ๋ค๋ฅธ ํจ์๋ ์ฝ๋๋ค์ด setTimeout์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ์คํ์ด ๋๋ค. ์ด๋ ๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ด ์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ด๋ค.
##์ด ์ธ์๋ ๋ค๋ฅธ ์ด์
- ๋น๋๊ธฐ์ ์คํ: setTimeout ํจ์๋ ์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํ๋๋ก ์์ฝํ๋ ์ญํ ์ ํ๋ค. ๋ฐ๋ผ์ setTimeout ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ฝ๋์ ์คํ์ด ์ง์ฐ๋๊ณ , ๋ค์ ์ฝ๋ ๋ธ๋ก์ด ์คํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ ๋ค์ ์ฝ๋๊ฐ ์คํ๋๋ค.
- ๋ธ๋กํนํ์ง ์์: setTimeout ํจ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์์ฝํ ํ์๋ ํ๋ก๊ทธ๋จ์ด ๋ธ๋กํน๋์ง ์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ผ๋ฉฐ, setTimeout์ผ๋ก ์์ฝ๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ์ ํจ๊ป ๋์: JavaScript์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ ๋น๋๊ธฐ์ ์ธ ์์ ์ ๊ด๋ฆฌํ๊ณ ์คํํฉ๋๋ค. setTimeout ํจ์๋ก ์์ฝ๋ ์์ ์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
# ์ฝ๋๋ก ๋ณด๋ ์์
function callSetTimeOut(){
setTimeout(()=>{ return console.log('1 - call!')},3000);
}
callSetTimeOut();
console.log('2 - call');
console.log('3 - call');
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด 2,3,1์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์ด๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ setTimeoutํจ์ ๋๋ฌธ์ด๋ค. ์์ฐจ์ ์ผ๋ก ์คํํ๊ฒ ํ๊ธฐ ์ํด์๋ promise, thne์ ์ฌ์ฉํด์ ๋น๋๊ธฐ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ๋ณํ์ ํด์ฃผ๋ฉด ๋๋ค.
## pormise, then์ ์ฌ์ฉํด์ ์์ฑํ๊ธฐ
function callSetTimeOut(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('1 - call!');
resolve(); // ๋น๋๊ธฐ ์์
์๋ฃ ํ ํ๋ก๋ฏธ์ค ํด๊ฒฐ
}, 3000);
});
}
callSetTimeOut().then(() => console.log('2 - call')).then(() => console.log('3 - call'));
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด 1,2,3์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค. ๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ ๊ฒ์ฒ๋ผ ํ ์ ์๋ค. ๋ํ promise, then์ ์ฌ์ฉํ๋ฉด ์ฝ๋ฐฑ ์ง์ฅ์์ ๋ฒ์ด ๋ ์ ์๋ค.
(resolve์๋ ์๋ฃ๋ ๊ฐ์ ์ ๋ฌํ๊ณ , reject์๋ ์๋ฌ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ํจ์๋ ์ ํ์ ์ผ๋ก ๊ฐ์ ๋ฐ์ ์ ์๋ค. ๋ง์ฝ ๊ฐ์ด ์ ๋ฌ๋์ง ์์ผ๋ฉด ๋ณดํต undefined๊ฐ ๋๋ค.)
## ์ฝ๋ฐฑ ์ง์ฅ ์์
setTimeout(() => {
console.log('์ฒซ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
setTimeout(() => {
console.log('๋ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
setTimeout(() => {
console.log('์ธ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
// ์ถ๊ฐ์ ์ธ ๋น๋๊ธฐ ์์
์ํ...
}, 1000);
}, 1000);
}, 1000);
์์ ๊ฐ์ด ์์ฑํ๊ฒ ๋๋ฉด ์ฝ๋ฐฑ ์ง์ฅ์ด๋ผ๋ ๋งค๋๋ฆฌ์ฆ์ ๋น ์ง๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์์๋งํ promise๋ฅผ ์ฌ์ฉํ๋ฉด๋๋ค. ์์ ์ฝ๋๋ฅผ promise๋ก ํด๊ฒฐํ๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋์จ๋ค.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
delay(1000)
.then(() => {
console.log('์ฒซ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
return delay(1000);
})
.then(() => {
console.log('๋ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
return delay(1000);
})
.then(() => {
console.log('์ธ ๋ฒ์งธ ๋น๋๊ธฐ ์์
์์');
// ์ถ๊ฐ์ ์ธ ๋น๋๊ธฐ ์์
์ํ...
});
'๐ ๏ธ๊ธฐ์ ๋๋น' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DOM, ๋๊ธฐ์ ๋น๋๊ธฐ, Hook, Promise(callback) (0) | 2024.03.15 |
---|---|
API๋ ๋ฌด์์ธ๊ฐ (0) | 2024.03.13 |
์ฝ๋ฐฑ ํจ์ (0) | 2024.03.13 |
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2024.01.12 |