반응형
javascript에서 sleep 함수 구현
javascript에는 sleep함수가 없어서, 직접 구현해서 사용해야합니다.
sleep 함수를 구현하는 법은 다음과 같습니다.
//ms micro sec만큼 대기
async function sleep(ms) => {
return new Promise(resolve=>{
setTimeout(resolve,ms)
});
}
사용법은 다음과 같이 sleep 함수 앞에 await를 붙여서 써 줍니다.
console.log('sleep 수행 전');
await sleep(1000);
console.log('1초 후에 실행결과출력');
Promise 없이 Sleep하기 1
오래된 자바스크립트 버전 (ecma6 이전)에서는 Promise를 쓸 수 없습니다.
이럴 때 대안 첫번째는 babel을 사용하는 것입니다.
아래와 같이 package.json설정을 하고, npm run build로 앞서 작성한 javascript 코드를 빌드하여 사용할 수 있습니다.
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "babel src -d dist"
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"@babel/cli": "^7.10.3",
"@babel/core": "^7.10.3",
"@babel/preset-env": "^7.10.3"
}
}
Promise 없이 Sleep하기 2
또 다른 방식은 아래와 같이 while looping을 하는 방식이 있습니다.
다만 이 방식은 cpu 부하가 크게 증가할 수 있는 위험이 있습니다.
function sleep(ms)
{
var start = new Date();
var current = null;
do { current = new Date(); }
while(current-start < ms);
}
사용법은 아래와 같습니다.
console.log('sleep 수행 전');
sleep(1000);
console.log('1초 후에 실행결과출력');
Promise 없이 Sleep하기 3
또 다른 방식은 setTimeout에 function을 넘겨주는 방식입니다.
setTimeout(func, ms);
사용법은 아래와 같습니다.
이 방식은 sleep을 여러번 하면 depth가 깊어져 코드를 읽기가 힘들어지는 단점이 있습니다.
console.log('sleep 수행 전');
setTimeout(function(){
console.log('1초 후에 실행결과출력');
},1000);
총평
javascript에서 기본적으로 sleep을 제공해주었으면 좋겠네요.
많은 사람들이 물어봄직하고, 다른 언어들에서는 기본 api 로 제공하는데 왜 javascript는 지원을 안하는지 의아합니다.
728x90
반응형
'자바스크립트 - Javascript' 카테고리의 다른 글
vue3 props, vue3 props 사용법, vue props function, vue props 전달, vue3 props ref, defineProps, script setup props (0) | 2024.08.07 |
---|---|
nvm이란, nvm windows 설치, nvm mac설치, nvm 사용법 (0) | 2024.08.05 |
cheerio 사용법, node cheerio, cheerio란?, cheerio를 사용한 웹크롤링, cheerio 예제, web scraping (0) | 2023.11.13 |
vue.js란? (0) | 2023.11.08 |
javascript로 form 태그 연속 submit 방지 코드, 중복 submit 방지 (0) | 2023.11.01 |
댓글