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
modernweb 2017
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
CypressKuo
September 20, 2017
Technology
0
77
modernweb 2017
心得分享
CypressKuo
September 20, 2017
Tweet
Share
More Decks by CypressKuo
See All by CypressKuo
Deep-copying.pdf
cypresskuo
0
32
CSS_for_Web_Vitals.pdf
cypresskuo
0
38
談談_Code_review.pdf
cypresskuo
0
44
REST_vs_GraphQL_今夜はご注文はどっち.pdf
cypresskuo
0
22
CSS_重構.pdf
cypresskuo
0
25
跟上_JS_的腳步-ES2020.pdf
cypresskuo
0
28
Core_Web_Vitals.pdf
cypresskuo
0
53
這個時代人人都知道的敏捷開發.pdf
cypresskuo
0
56
Webassembly.pdf
cypresskuo
0
12
Other Decks in Technology
See All in Technology
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
120
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
110
GitLab Duo Agent Platform × AGENTS.md で実現するSpec-Driven Development / GitLab Duo Agent Platform × AGENTS.md
n11sh1
0
120
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
150
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
Stately
mu7889yoon
1
110
Cosmos World Foundation Model Platform for Physical AI
takmin
0
250
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
150
プロポーザルに込める段取り八分
shoheimitani
1
170
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
0
330
今日から始めるAmazon Bedrock AgentCore
har1101
4
400
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
880
Featured
See All Featured
We Are The Robots
honzajavorek
0
160
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
130
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
240
How to make the Groovebox
asonas
2
1.9k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Raft: Consensus for Rubyists
vanstee
141
7.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Un-Boring Meetings
codingconduct
0
200
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
140
Transcript
ModernWeb 2017 ⼼心得報告分享 2017/09/20 前端組 CypressKuo
關於 JavaScript 非同步的那些事兒 By 陳鋒逸(陳⼩小風)
Agenda • JavaScript 與非同步 • Callback & Promise • Iterator
& Generator • Async & Await
JavaScript 與非同步
None
JavaScript • 單執⾏行行緒 • 非同步 • 非阻塞式
單執⾏行行緒 • 核⼼心特徵 • 瀏覽器導向 • 避免複雜性 • HTML5 Web
Worker
非同步/非阻塞 打電話訂書 店員:稍等,我查⼀一下 店員回覆 等待 店員:我查⼀一下,晚點再 回覆你 店員回電 等待 做其他事
乾等 同步 非同步 (非阻塞) (阻塞)
None
Call Stack Web Apis Callback Queue http://latentflip.com/loupe
Call Stack Web Apis Callback Queue http://latentflip.com/loupe i = 0
Call Stack Web Apis Callback Queue http://latentflip.com/loupe i < 4
Call Stack Web Apis Callback Queue http://latentflip.com/loupe setTimeout(function () {
console.log(i); }, 0)
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() i ++
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() i
< 4
Call Stack Web Apis Callback Queue http://latentflip.com/loupe setTimeout(function () {
console.log(i); }, 0) Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() i ++
Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() i
< 4 Anonymous() Anonymous()
…
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous() Console.log(i)
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Console.log(i)
PIXNET wiki Front-end Team cctsao - JavaScript VM 如何解析 Code
cctsao - JavaScript Async & Event Loop
Callback & Promise
Callback • 非同步 • 滿⾜足情境時觸發 • 複雜邏輯不好維護 • 較難處理理錯誤 圖片出處:https://brunolm.wordpress.com/2017/01/13/using-asyncawait-in-typescript-javascript/
Promise • 兼容性 • 狀狀態明確 • 可以連續執⾏行行 • 更更好維護/閱讀
Promise Success Failure
Can I Use Promise? https://caniuse.com/#search=promise
Iterator & Generator
Iterator • 佔記憶體空間 • 記憶體讀寫花時間 • 處理理 10000 個物件
Generator • ⼀一次⼀一個 • 停在上次執⾏行行之處 • 節省記憶體
Generator + co library • 暫時交出執⾏行行權 • 封裝非同步任務,處理理 Promise •
邏輯清楚好理理解 • 讓 Generator ⾃自動執⾏行行 https://github.com/tj/co
Async & Await
Async & Await • 結合 Promise 與 Generator + co
• 不需要第三⽅方套件 • 將非同步化程式同步化 • 直覺性的邏輯思考 • ES7, TypeScript, Node 7.6 ⽀支援
Async & Await • async - 標著在 function 前⾯面 •
await - 標著在 promise 前⾯面 • ⼀一定要⽤用 function 包裝
Can I Use Async? https://caniuse.com/#search=promise
回顧
Callback https://caniuse.com/#search=promise
Promise https://caniuse.com/#search=promise
Generator + co https://caniuse.com/#search=promise
async & await https://caniuse.com/#search=promise
總結 • 善⽤用非同步 • 學習新寫法、新技術 • 理理解運作機制 • 節省開發/除錯時間
學習新技術,讓我們更更優雅更更快速解決問題
Reference • http://s.itho.me/modernweb/2017/day2/403-3-陳⼩小風.pdf • https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/ Promise • https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/ async_function •
https://medium.com/@peterchang_82818/javascript-es7-async-await-教 學-703473854f29-tutorial-example-703473854f29 • https://jigsawye.com/2016/04/18/understanding-javascript-async-await/ • https://mlwmlw.org/2016/03/es7-的-async-await-入⾨門/ • https://noootown.wordpress.com/2016/11/13/callback-promise-fetch-yield-async- await/