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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
180
Swift Concurrencyを利用したUIViewController表示の排他制御の実装
to4iki
0
3.7k
ケースに応じたUICollectionViewのレイアウト実装パターン
to4iki
1
5.8k
ビューインプレッションの計測方法
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
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1k
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
210
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
460
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
230
「人を評価する AI」の設計と実装
ryoyanara
0
240
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
270
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
210
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
600
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
240
We Have a Design System, Now What?
morganepeng
55
8.3k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.5k
How to make the Groovebox
asonas
2
2.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
810
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
Chasing Engaging Ingredients in Design
codingconduct
0
280
Building Flexible Design Systems
yeseniaperezcruz
330
40k
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