Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript에서의 비동기 반복기
Search
Jin
July 26, 2018
Programming
1
170
JavaScript에서의 비동기 반복기
Jin
July 26, 2018
Tweet
Share
More Decks by Jin
See All by Jin
토스의 마이크로프론트엔드 아키텍처, 그리고 자동화
raon0211
5
8.1k
Other Decks in Programming
See All in Programming
Being an ethical software engineer
xgouchet
PRO
0
200
Code smarter, not harder - How AI Coding Tools Boost Your Productivity | Webinar 2025
danielsogl
0
120
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
310
AI Agents with JavaScript
slobodan
0
210
AIコーディングワークフローの試行 〜AIエージェント×ワークフローでの自動化を目指して〜
rkaga
2
3.3k
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
460
State of Namespace
tagomoris
3
530
[NG India] Event-Based State Management with NgRx SignalStore
markostanimirovic
0
110
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
950
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
320
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
880
Unlock the Potential of Swift Code Generation
rockname
0
240
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.2k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.4k
KATA
mclloyd
29
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
9
740
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
How to train your dragon (web standard)
notwaldorf
91
6k
A designer walks into a library…
pauljervisheath
205
24k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Code Reviewing Like a Champion
maltzj
522
39k
Raft: Consensus for Rubyists
vanstee
137
6.9k
Speed Design
sergeychernyshev
29
880
Bash Introduction
62gerente
611
210k
Transcript
JavaScript에서의 비동기 반복기 Seoul.js Lightning Talk, 2018. 7. 26. (금)
박서진
발표자 소개 박서진 Suhjin Park Ø Viva Republica (Toss) Ø
JavaScript, Scala Ø 표현적인 언어, 함수형 프로그래밍 Ø 디자인, 수학, 외국어 raon0211
[email protected]
https://suhj.in 2 JavaScript에서의비동기반복기
선행 지식 3 JavaScript에서의비동기반복기 Ø 동기/비동기 작업 (Synchronous/Asynchronous Operations) Ø
반복기(Iterator), 심볼(Symbol)
동기 작업, “Blocking” 4 JavaScript에서의비동기반복기
동기 작업으로 처리해서는 안 되는 것 5 JavaScript에서의비동기반복기 Ø 병행
처리 (Concurrency) Ø DB 읽기/쓰기, 파일 읽기/쓰기와 같은 무거운 작업 Ø 웹 프론트엔드 애플리케이션에서 무거운 작업 수행
비동기 작업 6 JavaScript에서의비동기반복기 Ø 사용자 JavaScript 코드는 싱글 스레드
Ø 무거운 작업을 순차적으로 작업 큐(Queue)에 삽입 Ø 작업이 완료되면 콜백 함수(완료 핸들러)가 실행 Ø setTimeout
손쉽게 구현하는 비동기 작업 7 JavaScript에서의비동기반복기 3,000+개 객체의 검색을 수행하여야
한다. Ø 무거운 작업을 1개의 검색으로 쪼갬 Ø 첫 번째 검색을 작업 큐에 넣음 Ø 하나의 객체에 대해 검색이 완료되면, 다음 객체의 검색을 작업 큐에 넣음 Ø 모든 객체의 검색이 완료되면 결괏값과 함께 콜백 함수를 실행 Ø 하나의 검색 사이사이에 다른 작업을 수행할 수 있음. PROFIT!
손쉽게 구현하는 비동기 작업 (코드) 8 JavaScript에서의비동기반복기
Promise 9 JavaScript에서의비동기반복기 Ø 비동기와 병행 처리를 위해 특화된 JavaScript의
일부분 Ø 값과 상태를 가지고 있음 Ø 비동기적으로 처리되는 값에 접근하는 방법 Ø 아무 의식 없이 사용하는 “모나드”: 작업을 우아하게 연쇄 처리할 수 있음 Ø 함수가 아니라 값 (*틀림: 10개의 Promise를 실행해라)
Promise의 상태 10 JavaScript에서의비동기반복기 Ø 작업 중(Pending), 완료(Fulfilled), 실패(Rejected/Cancelled) Ø
Promise가 완료되거나 실패하면 다시는 상태가 변경되지 않음 Ø 각종 런타임 오류에 대해 안전해짐 Ø Callback을 받는 함수를 손쉽게 Promise를 반환하는 함수로 변경 가능 Ø Native Promise, Bluebird
JavaScript에서의비동기반복기 Callback 함수에서 Promise를 반환하는 함수로 11
JavaScript에서의비동기반복기 오류 처리와 체이닝 12
JavaScript에서의비동기반복기 async/await 13 Ø ECMAScript의 새 키워드 Ø Promise 체이닝을
더 읽기 쉽게 만들어 줌, Syntactic Sugar Ø C#, F#, Dart, Python… Ø 여전히 비동기이고 이벤트가 바탕
JavaScript에서의비동기반복기 async/await 14
JavaScript에서의비동기반복기 반복기(Iterator) 15 Ø for … of 루프의 핵심 Ø
next(value) 메서드가 { value: any; done: boolean; }을 반환하면 반복기 Ø 한 번에 하나씩, 무한 길이도 가능 Ø ECMAScript 6의 function*
JavaScript에서의비동기반복기 반복기(Iterator) 16
JavaScript에서의비동기반복기 비동기 반복기(Async Iterator) 17 Ø 반복기가 Promise를 반환하면 비동기
반복기! Ø Rx 없이도 쉽게 반응형 프로그래밍이 가능해진다
JavaScript에서의비동기반복기 이벤트를 Promise로 변환 18
JavaScript에서의비동기반복기 이벤트를 비동기 반복기로 변환 19
JavaScript에서의비동기반복기 손쉬운 naïve 자동 완성! 20
감사합니다 JavaScript에서의 비동기 반복기 참고: “Why Async Iterators Matter”, Benjamin
Gruenbaum