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
to4iki
May 20, 2015
Programming
82
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.7k
ビューインプレッションの計測方法
to4iki
1
1.1k
秘伝の `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
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
280
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
320
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
770
どこまでゆるくて許されるのか
tk3fftk
0
280
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.6k
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
240
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
650
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
420
A2UI という光を覗いてみる
satohjohn
1
170
はてなアカウント基盤 State of the Union
cockscomb
1
1.2k
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
The Curious Case for Waylosing
cassininazir
1
420
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
HDC tutorial
michielstock
2
730
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Navigating Weather and Climate Data
rabernat
0
260
The Language of Interfaces
destraynor
162
27k
Become a Pro
speakerdeck
PRO
31
6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Accessibility Awareness
sabderemane
1
150
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