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
Promiseを実装してみよう
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroki Kumamoto
November 22, 2018
Programming
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Promiseを実装してみよう
Hiroki Kumamoto
November 22, 2018
More Decks by Hiroki Kumamoto
See All by Hiroki Kumamoto
How to implement timetable view on iOS
kumabook
0
130
bff_tips.pdf
kumabook
0
100
Tips of server-side rendering with react + redux
kumabook
0
100
プロトコルを使って複数サービスを跨いだmusic playerを実装する
kumabook
2
680
emacs helm likeな WebExtensions を作った話
kumabook
0
180
merges sort
kumabook
0
92
lightweight introducing with reactive cocoa
kumabook
0
73
basic_sort
kumabook
0
80
git_peco_tips
kumabook
0
41
Other Decks in Programming
See All in Programming
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
18k
Android CLI
fornewid
0
210
FDEが実現するAI駆動経営の現在地
gonta
2
280
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
110
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
190
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
プロポーザルを書いてもらう
pvcresin
0
300
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
300
数百円から始めるRuby電子工作
tarosay
0
140
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How GitHub (no longer) Works
holman
316
150k
Design in an AI World
tapps
1
280
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
Unsuck your backbone
ammeep
672
58k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Transcript
Promise Λ࣮ͯ͠ΈΑ͏ Hiroki Kumamoto a.k.a @kumabook We Are JavaScripters! @26th
͡Ίʹ • We Are JavaScripters! 2प͓ΊͰͱ͏͟͝ ͍·͢ʂ • About me:
• Twitter, GitHub: @kumabook • 3ճͷൃද
Promiseͱ • ඇಉظΛ͍͍ײ͡Ͱ͔͚Δͭ • MDNͷղઆ • ࡞࣌Ͱʢ݁Ռ͕)͔Βͳͯ͘Α͍ͷϓϩΩ γ • ޭࣦഊʹର͢ΔϋϯυϥʔΛؔ࿈͚Δ͜ͱ͕Ͱ͖
Δ • ಉظϝιουͱಉ͡Α͏ʹΛฦ͢͜ͱ͕Ͱ͖Δ
ྫ: BKBY \ VSMVSM TVDDFTT \BMFSU lTVDDFTTz ^
FSSPS \BMFSU lFSSPSz ^ ^ WBSQSPNJTFBKBY \VSMVSM^ QSPNJTFUIFO \BMFSU lTVDDFTTz ^ DBUDI \BMFSU lFSSPSz ^
• Promise.prototype.then(), Promise.prototype.catch()PromiseΛฦ͢ͷ ͰɺνΣʔϯʢ࿈ʣͰ͖Δ PromiseͷϝϦοτ BKBY \VSMVSM^ UIFO EBUB
BKBY \VSMVSM ʜ^ UIFO EBUB BKBY \VSMVSM ʜ^ DBUDI \BMFSU lFSSPSz ^
PromiseΛ࣮ͯ͠ΈΑ͏ • લ৬ͰΈࠐΈϒϥβ͚(es3)ʹ࣮ • es3ͳه๏Ͱ࣮ • catch͕༧ޠͳͷΛճආͳͲ • kumabook/yakusoku (174ߦ:
4KB) • jQuery.Deferred(Promiseͷલ)͕ಋೖ͞Εͨͷ͕ jQuery 1.5 (2011/1/31) • ࠓඪ४APIʹͳͬͯ͑ͯͨΓલ • ͳΜͱͳ͑ͯ͘ཧղͨ͠ؾʹͳ͍͕ͬͯͨࣗͰ࣮ͯ͠ษڧʹͳͬͨ
ࠓհ͢ΔAPIͷ࣮ • new Promise() • PromiseΦϒδΣΫτͷ࡞ • $.ajaxͳͲ͕෦తʹ͍ͬͯΔͷ • Promise.prototype.then()
• ޭɾࣦഊ࣌ͷϋϯυϥʔΛඥ͚ͮΔ
PromiseΦϒδΣΫτͷੜ • executor • resolveͱrejectΛҾʹͱΔ • resolve͔rejectͷͲͪΒ͔ҰํΛݺͼग़͢ • ޭͨ͠Βresolveɻࣦഊͨ͠Βreject •
͙͢ʹ࣮ߦ͞ΕΔ WBSQSPNJTFOFX1SPNJTF SFTPMWF SFKFDU \ TFU5JNFPVU \SFTPMWF GPP ^ ^
Promiseͷ࣮ߦঢ়ଶ • Promise ͷঢ়ଶ (pending, fulfilled, rejected) • fulfilled ͘͠rejectedʹͳͬͨঢ়ଶΛsettledͱ͍͏
QFOEJOH GVMpMMFE SFKFDUFE
Promiseͷঢ়ଶભҠ QFOEJOH GVMpMMFE SFKFDUFE 3VO FYFDVUPS SFTPMWF SFKFDU PS UISPXFSSPS
$BMM TVDDFTT IBOEMFS $BMM FSSPS IBOEMFS QSPNJTFͷঢ়ଶ QSPNJTFͷಈ࡞ FYFDVUPSͷಈ࡞
PromiseΛ࣮ͯ͠ΈΑ͏ • PromiseͷϓϩύςΟ • status: ঢ়ଶ(pending, fulfilled, rejected) • value:
ޭͨ࣌͠ͷ݁Ռɻࣦ͘͠ഊͨ͠ཧ ༝ • handlers: ޭͨ࣌͠ɺࣦഊͨ࣌͠ͷؔͷϖΞ ΛΩϡʔ(ྻ)Ͱอ࣋
PromiseͷίϯετϥΫλ • ϓϩύςΟͷॳظԽ • ҾͰ͖ͬͯͨexecutorΛ࣮ߦ
PromiseͷίϯετϥΫλ ϓϩύςΟͷॳظԽ WBS1SPNJTFGVODUJPO FYFDVUPS \ UIJTTUBUVT4UBUVT1&/%*/( UIJTWBMVFOVMM UIJTIBOEMFST<> UIJTSVO FYFDVUPS
^
ҾͰ͖ͬͯͨexecutorΛ࣮ߦ 1SPNJTFQSPUPUZQFSVOGVODUJPO FYFDVUPS \ WBSTFMGUIJT USZ\ FYFDVUPS GVODUJPO WBMVF \
TFMGGVMpMM WBMVF ^ GVODUJPO F \ TFMGSFKFDU F ^ ^DBUDI F \ TFMGSFKFDU F ^ ^ FYDFDVUPSࣗମ͕Τϥʔʹͳͬ ͨΒΩϟονͯ͠ΤϥʔΦϒδΣΫτͱ ͱʹϋϯυϥʔ FYDFDVUPS͕SFTPMWFͱ SFKFDUΛݺΜͰ͘ΕΔͷͰͦͷ݁Ռ Λϋϯυϥʔ
Promiseͷ࣮ߦঢ়ଶ QFOEJOH GVMpMMFE SFKFDUFE 3VO FYFDVUPS SFTPMWF SFKFDU PS UISPXFSSPS
$BMM TVDDFTT IBOEMFST $BMM FSSPS IBOEMFST TFMGGVMpMM TFMGSFKFDU
fulfillͱreject 1SPNJTFQSPUPUZQFGVMpMMGVODUJPO WBMVF \ WBSTFMGUIJT UIJTTUBUVT4UBUVT'6-'*--&% UIJTWBMVFWBMVF UIJTIBOEMFSTGPS&BDI GVODUJPO IBOEMFS
\ IBOEMFSPO'VMpMMFE TFMGWBMVF ^ UIJTIBOEMFST<> ^ ऴྃͨ͠QSPNJTFʹରͯ͠ UIFO͕ݺΕΔͷͰ
Promise.prototype.then() • ϋϯυϥͷϖΞΛొͭͭ͠ɺ৽͍͠PromiseΛฦ ͢ • ̎ͭϙΠϯτ͕͋Δ • ͢Ͱʹsettled(ྃࡁΈ)͔Ͳ͏͔ • Promise͕PromiseΦϒδΣΫτ(thenable)Ͱ
resolve͢Δ͔ʁ
Promise.prototype.then() • ͢Ͱʹsettled(ྃࡁΈ)͔Ͳ͏͔ • fulfilled or rejectedͳΒͦͷ··ϋϯυϥʔ ΛݺͿ • pendingͳΒexecutorͷ࣮ߦޙʹݺͿ
• queue(this.handlers)ʹੵΉ
Promiseͷ࣮ߦঢ়ଶ QFOEJOH 3VO FYFDVUPS SFTPMWF SFKFDU PS UISPXFSSPS ͜ͷؒʹUIFO ͜͜Ҏ߱ʹUIFO
Promise.prototype.then() • Promise͕PromiseΦϒδΣΫτ(thenable)Ͱresolve͢ Δ͔ʁ • ͠Promiseͷ݁Ռ͕PromiseΦϒδΣΫτͩͬͨ߹ ɺ͞ΒʹͦͷPromiseΦϒδΣΫτΛղܾͨ݁͠ՌΛ ࠾༻͢Δ • mapͱflatMap͕ϛοΫε͞Εͨڍಈ
• ಈతܕ͚ݴޠಛ༗ͳ༷
BKBY \VSMHFU6TFS6SM^ UIFO EBUB \ JG EBUBJT"ENJO \ SFUVSOBKBY
\VSMHFU%BUB6SM^ ^ SFUVSO<> ^ UIFO EBUB VQEBUF7JFX EBUB DBUDI \BMFSU lFSSPSz ^ QSPNJTFͱඇQSPNJTFͳ Λಁաతʹѻ͑Δ
1SPNJTFQSPUPUZQFUIFOGVODUJPO PO'VMpMMFE PO3FKFDUFE \ WBSTFMGUIJT SFUVSOOFX1SPNJTF GVODUJPO SFTPMWF SFKFDU \
TFMGFORVFVF0S&YFDVUF)BOEMFS GVODUJPO WBMVF \ JG WBMVFJOTUBODFPG1SPNJTF \ SFUVSOSFTPMWF WBMVFUIFO PO'VMpMMFE PO3FKFDUFE ^FMTF\ SFUVSOSFTPMWF PO'VMpMMFE WBMVF ^ ^ GVODUJPO F \ ʜ ^ ^ ^ ී௨ͷͷ߹ UIFOBCMFͷͷ߹
Promise API • ࠓճհͨ͠API • new Promise() • Promise.prototype.then() •
Γ • Promise.prototype.catch() • Promise.resolve(), Promise.reject() • Promise.all(), Promise.race()
·ͱΊ • PromiseΛ࣮Λհ • new Promise()ͱPromise.prototype.then() • ࣮γϯϓϧͱࢥ͍͖ͦͦ͜͜ෳࡶ • Stateful
+ asyncͳͷͰɺςετɾσόοάͣ͠Β͍ • Կؾͳ͍ͬͯ͘ΔAPIͷΛ༗ΓΈΛײ͡ΒΕ·͢
Thank you
ࢀߟࢿྉ • Promise - JavaScript | MDN • PromiseΛ͏ -
JavaScript | MDN • Promises/A+ • kumabook/yakusoku