[JavaScript] 비동기 통신 기초 : Promise 타입

2023. 5. 9. 18:25·JavaScript
728x90
728x90

Promise 객체

  - 비동기적으로 실행되는 작업을 처리하고, 그 결과를 콜백 함수 등을 이용해 처리하는 객체

  - 어떤 작업의 결과를 반환하는 객체

 

#  Promise의 상태

  1) 대기 (Pending)

      : Promise 객체가 생성되었으나, 아직 처리가 진행되지 않은 상태

  2) 이행 (Fulfilled)

      : Promise 객체가 처리를 완료하여 결과를 반환한 상태

  3) 거부 (Rejected)

      : Promise 객체가 처리를 실패했거나, 오류가 발생한 상태

 

 


비동기 작업 처리

 

  - 자바스크립트 엔진은 싱글 스레드로 동작함

 

  ▶ Call Stack 

      : 현재 실행 중인 함수를 기록하는 스택

      · Java의 스택 메모리와 유사

 

  ▶ Message Queue (Task Queue)

      : 비동기 작업이 완료되었을 때 등록되는 작업 목록

 

  ▶ Event Loop

      : Call Stack과 Message Queue를 주시하면서,

        Call Stack이 비어 있을 때 Message Queue에서 작업을 꺼내와 실행함

 

 

반응형
728x90

setTimeout() 함수 활용

#  예시 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
console.log("test3 start");
// resolve : 
// reject : 
let response = new Promise((resolve, reject) => {
    // 2초(2000ms) 뒤에 해당 코드가 실행되도록 함
    setTimeout(() => { // Task Queue에 등록
        console.log("통신 완료");
        let data = 10;
        resolve(data);
    }, 2000);
});           
// 2초 뒤에 동작하는 setTimeout()보다 먼저 실행
// 값을 가져오지 못하고 Promise object 타입이라는 것만 받아와짐
console.log("값 : " + response);
console.log("test3 end");
cs

 

#  예시 2

  - 예약어 async

      : 비동기 함수가 되기 위한 키워드

  - 예약어 await

      : Promise 타입이 처리될 때까지 기다리라는 키워드

 

  → 예시 1과 달리, setTimeout() 함수의 지연 시간이 끝난 후 값을 받을 때까지 기다리다가,

       통신이 완료되고 Promise 객체에 값이 담기고 나면 코드가 실행됨

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
async function test4() {
    console.log("test4 start");
 
    // await가 컴파일 시점에 확인됨
    // await가 있으면 async라는 예약어를 function 앞에 반드시 지정해주어야 컴파일 시점 오류가 사라짐
    let response = await new Promise((resolve, reject) => {
        setTimeout(() => { // Task Queue에 담김
            console.log("통신 완료");
            let data = 10;
            resolve(data); // 실행
        }, 2000);
    });          
 
    // data를 받아와, 10이 출력됨
    console.log("값 : " + response);
    console.log("test4 end");
}
Colored by Color Scripter
cs

 

 


비동기 통신의 기본 형식

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
32
33
34
<button onclick="runAsyncTask()">Promise Callback Test</button>
 
<script>
    function doAsyncTask() {
        return new Promise(function (resolve, reject) {
            let success = false;
            
            setTimeout(() => { // 여기 내부는 Task Queue에 저장
                // 성공 시
                if (success) {
                    resolve("정상적으로 수행을 완료함"); // 해당 값 return
                // 실패 시
                } else {
                    reject("비정상적으로 동작을 처리함"); // 해당 값 return
                }
            }, 3000);
        });
    }
 
    async function runAsyncTask() {
        console.log("test start");
 
        // 예외 처리
        try {
            // 비동기 함수 실행
            const result = await doAsyncTask();
            console.log(result);
        } catch (error) {
            console.log(error);
        }
        
        console.log("test end");
    }
</script>
Colored by Color Scripter
cs

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] 실행 환경 비교 (브라우저 vs node.js)  (0) 2023.08.03
[JavaScript] 비동기 통신 : AJAX  (0) 2023.05.09
[JavaScript] AJAX 통신을 이용해서 데이터 가져오기  (0) 2023.05.09
[JavaScript] toggle() 활용 예제 코드  (0) 2023.05.08
[JavaScript] BOM : document 객체 ★  (0) 2023.05.08
'JavaScript' 카테고리의 다른 글
  • [JavaScript] 실행 환경 비교 (브라우저 vs node.js)
  • [JavaScript] 비동기 통신 : AJAX
  • [JavaScript] AJAX 통신을 이용해서 데이터 가져오기
  • [JavaScript] toggle() 활용 예제 코드
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (385)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (9)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • IT Notes (13)
      • Error Notes (17)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
      • etc. (0)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Hotkeys
    zapier
    git
    SpringBoot
    오블완
    java
    js
    typeScript
    Swing
    errorNote
    SQL
    tailwindcss
    HTML
    jQuery
    vuejs
    면접
    SWAGGER
    cs
    jsp
    C#
    php
    개발일지
    SEO
    Android
    Wordpress
    CSS
    http
    티스토리챌린지
    Codeigniter
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[JavaScript] 비동기 통신 기초 : Promise 타입
상단으로

티스토리툴바