김보안의 블로깅
  • 🏠 Home
  • 📚 Project
    • Blockchain
      • 🎦 PickMe
      • 🎦 IoTC
      • 🎦 Blackchain
      • 📃 Gemology
      • 🎦 PickMe
      • 🎦 PickMe
    • AI
      • 👋 A.I. Dream Reader
      • 🎦 A.I. Dream Reader
    • Security
      • 🎦 SNAC
    • Education
      • 🎦 Smart Lecture
  • 🤸‍♂ Hobby
    • Music
      • Violin
      • Guitar
      • Piano
      • Drum
    • Flower
      • Flower Certificate
    • Sport
      • Ski
      • Skateboard
      • Golf
      • Boxing

2018년 12월 27일 목요일

Node.js 에서 for 문 안에 있는 비동기 함수에 대해 동기 맞춰주는 방법

 SecureKim     오전 12:37     비동기, 포문, async, await, for loop, Javascript, Node.js, pattern     No comments   

for loop in async/await javascript pattern


/*
    for 문 안에 있는 Async 함수를 Sync 하는 패턴으로
    은근히 자주 쓰이는데 막상 쓰려면 찾기도 만들기도 어려운 개똥같은 패턴이라고 할 수 있다.

    아래 시나리오는, 
    for 문을 돌면서 비동기 함수인 pushAsync 를 호출해서 
    datas 에 6,7,8,9,10 을 추가하려는 상황이다.
*/ 

console.log("=== START !");
datas = [1, 2, 3, 4, 5];

setTimeout (() => {
    //의외로 [1, 2, 3, 4, 5] 가 나오지 않는다.
    console.log("===== Amazing : " + datas);
}, 3000);

printAll();

/* 
    아래에서 번외로, printAll 에서 async 와 await 를 삭제하면 재미있는 일이 일어난다.
    pushAsync 5개를 한꺼번에 실행하고 setTimeout 이 한꺼번에 등록되면서, 
    1초가 지난 후 연속적으로 5개가 실행 된다.
*/
async function printAll() {
    for(var i = 0; i < 5; i++ ) { // for 안에서 비동기 함수가 동작할 것이다.
        await pushAsync(i);  //promise 를 리턴해야 await 로 사용 가능 하다.
    }
    console.log("=== END ? : " + datas);
}

function pushAsync(i) {
    return new Promise((resolve) => {
       setTimeout(() => {
           console.log("Add " + (6 + i) + " to Array.");
           datas.push(6 + i);
           resolve(datas);
       }, 1000);
    });
}

// 비동기 프로그래밍을 많이 해왔다면
// 아래의 결과는 놀랍지 않을 것이다.
console.log("=== Not amazing : " + datas); 


결과
=== START ! ===
Not amazing : 1,2,3,4,5
Add 6 to Array.
Add 7 to Array.
===== Amazing : 1,2,3,4,5,6,7
Add 8 to Array.
Add 9 to Array.
Add 10 to Array.
=== END ? : 1,2,3,4,5,6,7,8,9,10
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
이메일로 전송BlogThis!X에 공유Facebook에서 공유
최근 게시물 이전 게시물 홈

0 개의 댓글:

댓글 쓰기

페이지

  • 홈
  • Hobby

Categories

  • AI
  • AWS
  • Blockchain
  • Hardware
  • Javascript
  • Node.js
  • Plasma
  • Security
  • Study
  • Video
  • android
  • mysql
  • review
  • windows

Popular Posts

  • Network Ping Batch - 윈도우 네트워크 핑 스크립트
    네트워크 상태를 ping을 통해 시각적으로 보여주는 배치파일입니다. (왼쪽 IP에는 Ping이 안나가고 있고, 오른쪽 IP 에는 Ping이 나가고 있습니다.) 제가 만들었고 라이센스 없습니다. ----------------------------...
  • 회사 프록시와 인증서에 고통받는 그대를 위한 글 (Bash, Gradle, Python, wget, nodejs(npm), apt-get, cURL, git, yarn, androidStudio)
    대기업에 입사하면 장단점이 있는데, 단점 중에 하나가 회사에서 프록시를 사용하여 트래픽 감시를 하므로 프록시 설정을 해주어야 한다는 점 입니다. 특히, 회사에서는 https 트래픽도 감시를 하므로 인증서도 설정해 주어야 합니다. 그런데 문...
  • 블랙보드 강의 녹화 영상 다운로드 가능한 방법 (노설치)
    별도의 설치도 필요 없고 아주 쉽습니다. 구글 크롬브라우저 에서 블랙보드 녹화 영상에  다운로드 가능한 메뉴가 나오게 하는 코드입니다.  먼저 블랙보드 강의자료에 입장하고, 재생 버튼을 클릭 하지 않은 상태로 F12 를 입력합니다. 재생을 클릭하지 마...

Blog Archive

  • ►  2026 (2)
    • ►  2월 (2)
  • ►  2025 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  7월 (1)
  • ►  2024 (2)
    • ►  11월 (2)
  • ►  2023 (2)
    • ►  10월 (1)
    • ►  1월 (1)
  • ►  2022 (10)
    • ►  12월 (1)
    • ►  11월 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  6월 (2)
    • ►  3월 (2)
  • ►  2021 (9)
    • ►  12월 (3)
    • ►  11월 (1)
    • ►  6월 (1)
    • ►  5월 (2)
    • ►  4월 (2)
  • ►  2020 (12)
    • ►  10월 (1)
    • ►  9월 (2)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (5)
    • ►  4월 (1)
    • ►  2월 (1)
  • ►  2019 (14)
    • ►  10월 (2)
    • ►  7월 (1)
    • ►  3월 (4)
    • ►  2월 (2)
    • ►  1월 (5)
  • ▼  2018 (14)
    • ▼  12월 (2)
      • KMP 쉽게 이해하기 (Failure Function 이해)
      • Node.js 에서 for 문 안에 있는 비동기 함수에 대해 동기 맞춰주는 방법
    • ►  11월 (4)
    • ►  10월 (1)
    • ►  8월 (2)
    • ►  5월 (4)
    • ►  1월 (1)
  • ►  2017 (12)
    • ►  10월 (2)
    • ►  9월 (9)
    • ►  5월 (1)
  • ►  2016 (8)
    • ►  10월 (2)
    • ►  8월 (1)
    • ►  6월 (1)
    • ►  1월 (4)
  • ►  2015 (6)
    • ►  12월 (3)
    • ►  10월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
  • ►  2014 (10)
    • ►  11월 (1)
    • ►  9월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (3)
    • ►  4월 (1)
    • ►  3월 (2)
  • ►  2013 (28)
    • ►  12월 (3)
    • ►  11월 (6)
    • ►  10월 (6)
    • ►  9월 (6)
    • ►  8월 (1)
    • ►  7월 (3)
    • ►  6월 (3)

구독

글
Atom
글
댓글
Atom
댓글

로드 중입니다...

각오

직접 해보지 않은 것은 포스팅 하지 않겠습니다.

Copyright © 김보안의 블로깅 | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates