Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
promise
Search
to4iki
May 20, 2015
Programming
84
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
promise
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise
to4iki
May 20, 2015
More Decks by to4iki
See All by to4iki
Claude Code の活用事例
to4iki
0
190
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.8k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.9k
ビューインプレッションの計測方法
to4iki
1
1.2k
秘伝の `gitconfig`
to4iki
1
470
Abema iOS Architecture
to4iki
12
3.6k
timetable-bot
to4iki
0
15k
BLoC Pattern Introduction with Swift
to4iki
2
1.4k
nel
to4iki
0
200
Other Decks in Programming
See All in Programming
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
360
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3.2k
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
100
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
160
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
200
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
190
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
570
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
800
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
140
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.2k
Featured
See All Featured
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
510
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
550
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
900
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
GraphQLとの向き合い方2022年版
quramy
50
15k
Evolving SEO for Evolving Search Engines
ryanjones
0
300
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
530
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
First, design no harm
axbom
PRO
2
1.3k
Transcript
Promiseͱ͔ 2015—05-18 toshiki takezawa @to4iki
୭ʁ • ᖒढ़ق • 2012/4 • Ruby, Scala, Swift, JavaScript
• ·ͨΛ৳ͦ͏ͱࢥͬͯͨΓ
ԿͬͯΜͷɺͬͯͨʁ • WebαΠτͷJava -> RubyͷϦϓϨΠ • ιγϟήͷAPI࡞ • ిࢠϚϯΨͷϓϥοτϑΥʔϜӡӦ •
ઌ݄iOSΞϓϦΛϦϦʔε͠·ͨ͠
What is Promise?
Promise ͱݺΕΔͷ͕͋ΔΒ͍͠ݴޠ • ECMAScript 6 (Promises A/+) • jQuery.Deferred •
Java (java.util.concurrent.Future) • Scala (scala.concurrent.Future)
Promise<T> • ඇಉظॲཧΛநԽͨ͠ΦϒδΣΫτͱͦΕ Λૢ࡞͢ΔΈ • কདྷతʹ "ਖ਼ৗͳ" or "ҟৗͳ" ͕ೖΔࣄΛ༧ͨ͠ΦϒδΣΫτ
• ex. APIͷϦΫΤετ͕ฦ͖ͬͯͨΒ… • ͍ΘΏΔσβΠϯύλʔϯͷͻͱͭ
ඇಉظ?
ྫ. Α͋͘Δඇಉظॲཧ (JavaScriptͰ)
callback pattern getA(function(error, a) { // Aऔಘࣦഊ࣌ͷॲཧ if (error) {
throw error; } getB(function(error, b) { // Bऔಘࣦഊ࣌ͷॲཧ if (error) { throw error; } getC(function(error, c) { // Cऔಘࣦഊ࣌ͷॲཧ if (error) { throw error; } // a, b, cऔಘޭ࣌ͷॲཧ done(); }); }); });
None
promise pattern getA() .then(getB()) .then(getC()) .then(done()) .catch(function(e) { throw e;
})
Example.
ex. getURL function getURL(URL) { return new Promise(function (resolve, reject)
{ var req = new XMLHttpRequest(); req.open('GET', URL, true); req.onload = function () { if (req.status === 200) { resolve(req.responseText); // ޭ࣌ } else { reject(new Error(req.statusText)); // ࣦഊ࣌ } }; req.onerror = function () { reject(new Error(req.statusText));ɹ// ࣦഊ࣌ }; req.send(); }); } • PromiseίϯετϥΫλ͔ΒPromiseΦϒδΣΫτ(Πϯελϯε)Λ࡞Γฦ͢ • ίϯετϥΫλͷதͰ(ඇಉظ)ॲཧΛߦ͏ • ॲཧͷ൱ʹΑͬͯɺresolve<݁Ռͷ> ·ͨ reject<ErrorΦϒδΣΫτ> ΛݺͿ
PromiseΦϒδΣΫτ var URL = "http://httpbin.org/get"; getURL(URL).then(function onFulfilled(value){ console.log(value); }).catch(function onRejected(error){
console.error(error); }); • promiseΦϒδΣΫτʹͦΕͧΕcallbackΛొ • then Ͱޭ࣌ʹݺͼग़͢callback(fulfill͞Εͨ) • catchͰࣦഊ࣌ʹݺͼग़͢callback(reject͞Εͨ) • PromiseίϯετϥΫλͷॲཧ݁ՌʹΑͬͯͲͪΒ͔͕ݺΕΔ
Promiseͷശ • ࠓ·ͩͳ͍͚Ͳকདྷతʹதʢʣ͕ಘΒΕΔശ • resolve<T> or reject<Error> • ͕ೖͬͨ࣌ʹ then
or catchΛݺͿͱ͍͏ػೳΛͬͨശ • Optionalͱಉ͡(தʢʣ͕ۭ͔͠Εͳ͍ശ) • Some<T> or None • Eitherͱಉ͡(தʢʣ͕Τϥʔ͔͠Εͳ͍ശ) • Left<Error> or Right<T>
Promiseͷঢ়ଶ3͚ͭͩ • Fulfilled • resolve(ޭ)ͨ࣌͠ɺ͜ͷ࣌thenͰొͨ͠callback͕ݺΕΔ • Rejected • reject(ࣦഊ)ͨ࣌͠ɻ͜ͷ࣌ catchͰొͨ͠ίʔϧόοΫ
͕ݺΕΔ • Pending • resolve·ͨrejectͰͳ͍࣌ɻpromiseΦϒδΣΫτ͕࡞͞Εͨॳظঢ়ଶ͕֘͢Δ
Promise͍ࣺͯΦϒδΣΫτ • promiseΦϒδΣΫτҰঢ়ଶ͕มߋͨ͠ΒͦΕҎ ߱ෆม • ͭ·Γɺಉ͡PromiseΦϒδΣΫτΛ͍·Θ͞ͳ͍ (immutable) • thenৗʹ৽͍͠ΦϒδΣΫτΛ࡞ͯ͠ฦ͢
࿈తʹॻ͚Δ(promise chain) Promise.resolve(2) .then(function(v) { return v * 2; })
.then(function(v) { return v * v; }) .then(function(v) { console.log(v); }) .catch(function(e) { // Ͳ͔͜Ͱerrror͕ى͖ͨΒ͜͜Ͱcatch͞ΕΔ console.error(e); }) • thencatchϝιουνΣʔϯͳͷͰ࿈ଓͰॻ͚Δ • thencatchຖճ৽͍͠promiseΦϒδΣΫτΛฦͯ͠࿈͢Δ
Promiseͱerror handling • ίϯετϥΫλͰrejectΛฦ͢ͱcatch͞ΕΔ • PromiseͰى͖ͨΤϥʔࣗಈతʹtry-catch͞ΕɺPromiseͰcatchͰ͖ Δ • ͦΕͧΕݸผͷॲཧ͔ΒΤϥʔϋϯυϦϯά͕ͳ͘ͳΔ(reject͢Δ͚ͩ) •
ٯʹ.catchΛॻ͖ΕΔͱԿݴΘͳ͘ͳͬͯ͠·͏ • PromiseͰඇಉظॲཧʹ͕ߦ͖͕͕ͪͩΤϥʔϋϯυϦϯάͷํΛ༏ ઌͨ͠
͍ॲ • PromiseΛ͏͜ͱͰɺॲཧΛநతͳͱͯ࣋ͭ͜͠ͱ͕ՄೳʹͳΔ • ͦΕͧΕͷॲཧΛPromiseͰϥοϓͯ͠ɺΈ߹ΘͤΔ͚ͩͰྑ͘ͳ Δ • ඇಉظAPIͰೝূ͔ͯ͠ΒͰͳ͍ͱୟ͚ͳ͍APIΛ͏࣌ • ϩάΠϯAPI
+ ඇಉظ௨৴API • ඇಉظॲཧͷΤϥʔϋϯυϦϯάͷ؆ܿԽ • callbackͩͱશͯࣗͰΔඞཁ͕͋Δ
·ͱΊ • PromiseඇಉظॲཧΛPromiseΦϒδΣΫτ (ະདྷͷΛ֨ೲͨ͠ശ)ͱͯ͠ѻ͑Δ • ෳͷඇಉظॲཧΛ·ͱΊΔ࣌ʹ༗ޮ • Promiseڧ͍ΤϥʔϋϯυϦϯάΛ࣋ͬͯΔ • PromiseສೳͰͳ͍ͷͰదࡐదॴ
͋Γ͕ͱ͏͍͟͝·ͨ͠
see also • Promise - JavaScript | MDN • https://developer.mozilla.org/ja/docs/Web/JavaScript/
Reference/Global_Objects/Promise • JavaScript Promiseͷຊ • http://azu.github.io/promises-book • ࠓߋ͚ͩͲPromiseೖ • http://qiita.com/koki_cheese/items/c559da338a3d307c9d88