비동기 호출

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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바