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
88
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
200
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
気持ちぃ〜角丸 Squircle
ryu1013
0
310
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
120
Workers Cache を知る
syumai
0
370
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
JIS keyboard support in Omarchy
lef237
0
120
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
240
Domain-Driven Transformation
hschwentner
2
2.3k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
610
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
570
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Thoughts on Productivity
jonyablonski
76
5.4k
We Have a Design System, Now What?
morganepeng
55
8.4k
Scaling GitHub
holman
464
140k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Why Our Code Smells
bkeepers
PRO
340
58k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
WCS-LA-2024
lcolladotor
0
890
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
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