Notice
Recent Posts
Recent Comments
Link
투케이2K
501. (javaScript) [간단 소스] 자바스크립트 async await 사용해 new Promise 순차 대기 sleep 일정 시간 대기 동작 코드 작성 본문
JavaScript
501. (javaScript) [간단 소스] 자바스크립트 async await 사용해 new Promise 순차 대기 sleep 일정 시간 대기 동작 코드 작성
투케이2K 2026. 3. 2. 18:39728x90
반응형
[개발 환경 설정]
개발 툴 : Edit++
개발 언어 : JavaScript

[소스 코드]
-----------------------------------------------------------------------------------------
[사전 설명 및 설정 사항]
-----------------------------------------------------------------------------------------
- 개발 환경 : Web
- 개발 기술 : JavaScript (자바스크립트) / async / await / new Promise
- 사전) Promise 간편 설명 :
>> Promise 는 미래에 완료될 작업의 결과값을 나타내는 객체입니다.
- 미래에 완료될 작업의 결과(성공/실패) 를 나타내는 객체입니다.
>> Promise는 3가지 상태를 가집니다 :
- pending → 대기중
- fulfilled → 성공 (resolve 호출)
- rejected → 실패 (reject 호출)
- 사전) async 간편 설명 :
>> async 는 함수를 자동으로 Promise로 만들어주는 문법입니다.
>> async 함수는 항상 Promise를 반환합니다
>> return 값은 자동으로 resolve 되며, 에러가 발생하면 자동으로 reject 됩니다
- 사전) await 간편 설명 :
>> await 는 Promise가 끝날 때까지 기다리는 문법입니다.
>> await 는 async 함수 안에서만 사용 가능합니다.
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
[소스 코드]
-----------------------------------------------------------------------------------------
<!DOCTYPE HTML>
<html lang="ko">
<head>
<title>javaScriptTest</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- 반응형 구조 만들기 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
<!-- 내부 CSS 스타일 지정 -->
<style>
html, body {
width: 100%;
height: 100%;
margin : 0 auto;
padding : 0;
border : none;
background-color: #666;
}
</style>
<!-- [CDN 주소 설정] -->
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<!-- [자바스크립트 코드 지정] -->
<script>
// --------------------------------------------------------------------------------------------------------------
// [요청 URL 정의]
const getUrl = function(idx){
return `https://dev.test.co.kr/api/${idx}/control`
}
// [요청 파람 정의]
const getParams = function(controlNum){
return { // JSON
status: controlNum
}
}
// ✅ [요청 횟수 및 슬립 대기 시간 정의]
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
const requestSleep = 3000; // 3초 대기 후 재전송
const requestCnt = 5; // 반복 요청 횟수
// --------------------------------------------------------------------------------------------------------------
// [html 최초 로드 및 이벤트 상시 대기 실시]
window.onload = async function() { // ✅ async 함수 정의
console.log("");
console.log("=========================================");
console.log("[window onload] : [start]");
console.log("=========================================");
console.log("");
try {
// -------------------------------------
// 요청 변수
// -------------------------------------
const URL = getUrl(1528);
// -------------------------------------
// for await 동기 순차 전송
// -------------------------------------
console.log("[for] : [start]");
for (let i = 1; i <= requestCnt; i++) {
try {
// [요청 body 값 status 는 0 ~ 5 범위 동적 할당]
const num = Math.floor(Math.random() * 6); // 0 이상 6 미만 실수 (typeof Math.floor == number)
const param = getParams(num);
console.log(`${i} : HTTP Request : `, JSON.stringify(param));
// ✅ [fetch 요청 샘플 구문]
/*
const res = await fetch(URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// 필요시 인증
// 'Authorization': `Bearer ${YOUR_TOKEN}`,
},
body: JSON.stringify(param),
});
if (!res.ok) {
console.error(`${i} : HTTP Error : ${res.status}`);
}
else {
const data = await res.json().catch(() => null);
console.warn(`${i} : HTTP Success : ${res.status} : `, data ?? '(no json)');
}
// */
// ✅ [다음 요청 대기 후 처리]
if (i < requestCnt) {
await sleep(requestSleep);
}
} catch (err) {
console.error(`for : exception : `, err);
}
}
console.log("[for] : [end]");
// -------------------------------------
// for 동작 로그 예시 첨부
// -------------------------------------
/*
[for] : [start]
1 : HTTP Request : {"status":1}
2 : HTTP Request : {"status":3}
3 : HTTP Request : {"status":1}
4 : HTTP Request : {"status":4}
5 : HTTP Request : {"status":0}
[for] : [end]
*/
// -------------------------------------
}
catch (exception) {
console.error("");
console.error("=========================================");
console.error("[window onload] : [Exception] : 예외 상황 발생");
console.error("-----------------------------------------");
console.error(exception);
console.error("=========================================");
console.error("");
}
};
// --------------------------------------------------------------------------------------------------------------
</script>
</head>
<body>
</body>
</html>
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
[참고 사이트]
-----------------------------------------------------------------------------------------
[fetch (페치) Web API 사용해 async await 동기 방식 http 요청 및 response header 및 body 확인 실시]
https://kkh0977.tistory.com/3514
https://blog.naver.com/kkh0977/222952720427?trackingCode=blog_bloghome_searchlist
[간단 소스] 자바스크립트 동적 html 코드 작성, new Blob 및 URL.createObjectURL 사용해 window.open 새창 열기
https://kkh0977.tistory.com/8452
https://blog.naver.com/kkh0977/224097132149
[자바스크립트 브라우저 사이즈, 해상도 구하기 및 window open 윈도우 창 열기 실시]
https://kkh0977.tistory.com/847
https://blog.naver.com/kkh0977/222392594793?trackingCode=blog_bloghome_searchlist
[자바스크립트 window open close 사용해 현재 브라우저 창 닫기 수행 - 브라우저 종료]
https://blog.naver.com/kkh0977/223203344998?trackingCode=blog_bloghome_searchlist
[모바일] 내부 window open 상태 감지 및 새로운 웹뷰 작업 로직 수행 방법
https://blog.naver.com/kkh0977/222609480598?trackingCode=blog_bloghome_searchlist
-----------------------------------------------------------------------------------------
728x90
반응형
'JavaScript' 카테고리의 다른 글
Comments
