비동기 호출

2020. 11. 27. 18:35·BootCamp_Codestates/Pre Tech Blog

동기 호출 예시

function waitSync(ms) {
    var start = Date.now();
    var now = start;
    while(now - start < ms) {
        now = Date.now();
    }
} // 현재 시각과 시작 시각을 비교하여 ms 범위 내에서 무한 루프를 도는 blocking 함수 

function drink(person, coffee) {
    console.log(person + '는 ' + coffee + '를 마십니다')
}

function orderCoffeeSync(coffee) {
    console.log(coffee + '가 접수되었습니다');
    waitSync(2000); //2초동안 blocking 시킨다..!!!
    return coffee;
}

let customers = [{
    name: 'Mindy',
    request: 'Cafe Latte'
}, {
    name: 'Jay',
    request: 'Americano'
}];

//call synchronously 
customers.forEach(function(customer){
    let coffee = orderCoffeeSync(customer.request);
    drink(customer.name, coffee);
});

Mindy가 접수 후 마셔야 Jay가 주문하고 마실 수 있다...... Jay는 매우 화가 난다.

 

비동기 호출 예시

function waitAsync(callback, ms) {
    setTimeout(callback, ms);
} // 특정 시간 이후에 callback 함수가 실행되게끔 하는 브라우저 내장 기능.

function drink(person, coffee) {
    console.log(person + '는 ' + coffee + '를 마십니다')
}

let customers = [{
    name: 'Mindy',
    request: 'Cafe Latte'
}, {
    name: 'Jay',
    request: 'Americano'
}];

function orderCoffeeAsync(menu, callback) {
  console.log(menu + '가 접수되었습니다');
    waitAsync(function() {
        callback(menu);
    }, 4000);
}

//call synchronously 
customers.forEach(function(customer){
   orderCoffeeAsync(customer.request, function(coffee) { //2번째 인자로 callback 함수)
    drink(customer.name, coffee);
    });
});

Jay는 카페인을 느낀다.

1. Mindy가 cafe latte를 주문한다(orderCoffeeAsync) => waitAsync(callback(cafe latte), 4초)

2. Jay가 Americano를 주문한다(orderCoffeeAsync) => waitAsync(callback(Americano), 4초)

3. 4초가 지났고, function(coffee){ drink (Mindy, Cafe Latte)} 가 실행된다.

4. 4초가 지났고, function(coffee){ drink (Jay, Americano)} 가 실행된다. 

 

브라우저의 비동기 함수 작동 원리가 궁금하다면?

Event Loop: developer.mozilla.org/ko/docs/Web/JavaScript/EventLoop

Philip Roberts: I'm stuck in an event loop => youtube(youtu.be/6MXRNXXgP_0)

 

'BootCamp_Codestates > Pre Tech Blog' 카테고리의 다른 글

런타임 node.js  (0) 2020.12.02
spread syntax VS rest parameter  (0) 2020.11.27
알고리즘 - 수도코드 작성법  (0) 2020.11.10
고차함수(Higher Order Function)  (0) 2020.11.10
Closure  (0) 2020.11.08
'BootCamp_Codestates/Pre Tech Blog' 카테고리의 다른 글
  • 런타임 node.js
  • spread syntax VS rest parameter
  • 알고리즘 - 수도코드 작성법
  • 고차함수(Higher Order Function)
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    indie hacker
    js pattern
    How memory manage data
    CPU scheduling algorithm
    need a database
    커리어
    프론트엔드 성능 최적화 가이드
    leetcode
    Data Structure
    Time complexity and Space complexity
    딥다이브
    이벤트
    mobile app
    Network
    TCP/IP
    자바스크립트
    database
    testing
    VoiceJournal
    DOM
    자바스크립트 딥다이브
    Operating System
    Shared resources
    모던 자바스크립트 Deep Dive
    structure of os
    Binary Tree BFS
    스코프
    JavaScript
    polylingo
    Threads and Multithreading
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
비동기 호출
상단으로

티스토리툴바