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
kaidouji85
October 14, 2016
Technology
0
310
Promise完全攻略
kaidouji85
October 14, 2016
Tweet
Share
More Decks by kaidouji85
See All by kaidouji85
一発芸!!なんちゃってローカライズ
kaidouji85
0
56
AWSだけでネット対戦できるブラウザゲームを作った話
kaidouji85
0
56
GitHub CopilotでJavaScript開発効率を爆上げする
kaidouji85
0
98
Serverless + Fargate構成で継続的デリバリーの速度を劇的に改善した話
kaidouji85
0
890
サーバーレスアーキテクチャこそ"ヘキサゴナルアーキテクチャ"
kaidouji85
0
97
サーバーレスでターンベース制のネット対戦ゲームを作った話
kaidouji85
0
610
CDKで構築したFargateのデプロイ時間を改善した話
kaidouji85
2
530
ブラウザゲームで視聴者参加型のゲーム配信
kaidouji85
0
330
JSだけでバックエンド環境構築、IaC、自動デプロイまでやってみた話
kaidouji85
0
360
Other Decks in Technology
See All in Technology
なごミュ@SPAJAM2025 第二回予選
1901drama
0
110
僕たちが「開発しやすさ」を求め 模索し続けたアーキテクチャ #アーキテクチャ勉強会_findy
bengo4com
0
2.6k
Amazon Qで2Dゲームを作成してみた
siromi
0
180
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
7
920
AIは変更差分からユニットテスト_結合テスト_システムテストでテストすべきことが出せるのか?
mineo_matsuya
5
2.7k
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
1
270
AIに頼りすぎない新人育成術
cuebic9bic
3
340
夏休みWebアプリパフォーマンス相談室/web-app-performance-on-radio
hachi_eiji
1
270
自治体職員がガバクラの AWS 閉域ネットワークを理解するのにやって良かった個人検証環境
takeda_h
2
340
プロジェクトマネジメントは不確実性との対話だ
hisashiwatanabe
0
170
開発と脆弱性と脆弱性診断についての話
su3158
0
140
[OCI Technical Deep Dive] OracleのAI戦略(2025年8月5日開催)
oracle4engineer
PRO
1
250
Featured
See All Featured
Fireside Chat
paigeccino
39
3.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
890
Rails Girls Zürich Keynote
gr2m
95
14k
Documentation Writing (for coders)
carmenintech
73
5k
Gamification - CAS2011
davidbonilla
81
5.4k
Visualization
eitanlees
146
16k
Typedesign – Prime Four
hannesfritz
42
2.8k
A designer walks into a library…
pauljervisheath
207
24k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How to Ace a Technical Interview
jacobian
279
23k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Transcript
Promiseશ߈ུ ळͷJavaScriptࡇɹin mixi ʙळͷJavaScriptऩ֭ࡇʙ 2016/10/15 ɹ༎հ
ࣗݾհ ɹ༎հ ϓϩάϥϚʔͰ͢ ීஈjavascriptɺ javaͬͯ·͢
ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ͍ํ Promiseͷಋೖํ๏ ·ͱΊ
Promiseͱ͍͑ ܅ͨͪͬͺΓ ϓϩϛεͩ Ͱ͕͢
jsͰͷPromiseͱ ඇಉظॲཧΛ εϚʔτʹॻ͘Έ
ͨͩɺॳ৺ऀʹͱͬͯ ϋʔυϧ͕ߴͦ͏ͳͷࣄ࣮
େৎɺ͜ͷػձʹ શ߈ུͪ͠Ό͍·͠ΐ͏
ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ͍ํ Promiseͷಋೖํ๏ ·ͱΊ
Promiseͱ ඇಉظॲཧΛεϚʔτʹॻͨ͘ΊͷΈͰ͢ ίʔϧόοΫࠈΛղফͰ͖·͢ ඇಉظ͕ΒΈͷΤϥʔϋϯυϦϯάΛεϚʔτ ʹ͔͚·͢
ඇಉظॲཧͱ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ
ඇಉظॲཧͱ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ processA(); processB();
ඇಉظॲཧͱ processA processB αʔόϦΫΤετͳͲ ͕͔͔࣌ؒΔॲཧ processA(); processB(); ͜͏ॻ͚ͳ͍
ඇಉظॲཧͱ processA(function() { processB(); }); ࣮ࡍʹ͜͏ॻ͘ processA͕ऴΘͬͨ͋ͱʹ࣮ߦ͢ΔؔΛ͢ ˢ͜͏͍͏ͷΛίʔϧόοΫؔͱ͍͏
ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ͍ํ Promiseͷಋೖํ๏ ·ͱΊ
ྫ processA Լਤͷॱ൪ͰɺඇಉظॲཧΛߦ͏ͱ͢Δ ͜ΕΛίʔϧόοΫɺPromiseͰॻ͘ processB processC processD
ίʔϧόοΫͰॻ͍ͨ߹ processA(function() { processB(function() { processC(function() { processD(); }); });
}); ؔΛݺͿͨͼʹωετ͕ਂ͘ͳΔ ͜ΕͰذྫ֎ॲཧ͕ೖΔͱࢮʹͦ͏ ͜͏͍͏ͷΛίʔϧόοΫࠈͱ͍͏
PromiseͰॻ͍ͨ߹ processA() .then(function() { return processB(); }).then(function() { return processC();
}).then(function() { return processD(); }); ωετ1ஈ֊ਂ͘ͳΔ͕ɺͦΕҎ্ਂ͘ͳΒͳ͍ ίʔϧόοΫࠈΛ͋ΔఔࠀͰ͖͍ͯΔ
ൺֱͯ͠Έ·͠ΐ͏ processA(function() { processB(function() { processC(function() { processD(); }); });
}); processA() .then(function() { return processB(); }).then(function() { return processC(); }).then(function() { return processD(); }); Promiseͷํ͕͔Γ͍͢
ΞϩʔؔΛ͏ͱ ͬͱεϚʔτʹͳΔ processA() .then(() => processB()) .then(() => processC()) .then(()
=> processD());
ɹྫ֎ॲཧεϚʔτʹॻ͚Δ processA() .then(() => processB()) .then(() => processC()) .then(() =>
processD()) .catch(() => { //ྫ֎ॲཧ }) ͲͷؔͰྫ֎͕ग़ͯɺcatchʹඈΜͰऴྃ͢Δ try-catchΈ͍ͨͳ͍ํ͕Ͱ͖Δ
ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ͍ํ Promiseͷಋೖํ๏ ·ͱΊ
Promiseͷಋೖํ๏ ຆͲͷϒϥβͰඪ४උͯ͠Δ ϥΠϒϥϦΛΠϯετʔϧ͢Δඞཁͳ͠ ͕ؔPromiseΦϒδΣΫτΛฦ͢Α͏ʹ͢Δ fetch apiͳͲൺֱత৽͍͠ͷPromiseΛฦ͢ طଘͷίʔϧόοΫؔܥͷͷΛPromiseԽ͢Δ ํ๏ޙड़
http:/ /caniuse.com/#search=Promise PromiseͷରԠঢ়گ
IEҎ֎…… ·͞ʹ ͱ͍͏ঢ়ଶ ͜ΜͳͷͲ͜ʹͰ ͍ΔͩΖ͏
Ͳ͜ʹͰ͍Δ ܅ͨͪͬͺΓPromiseͩ ૉΒ͍͠ʂʂ
طଘؔΛPromiseԽ // ݩͷؔ function processA(cb) { // ͕͔͔࣌ؒΔॲཧ cb(); }
// PromiseԽ function processAWithPromise() { return Promise((resolve, reject) => { processA(resolve); })); }
طଘؔΛPromiseԽ // PromiseԽ function processAWithPromise() { return Promise((resolve, reject =>
{ processA(resolve); })); } શମΛPromiseͰׅΔ ݩͷؔͷίʔϧόοΫʹresolveΛ͢
༨ஊ
কདྷతʹඇಉظॲཧ ͬͱָʹͳΓ·͢ async function main() { await processA(); await processB();
await processC(); await processD(); } ͍ΘΏΔasyncɺawait
ͨͩ͠asyncɺawaitΛ͏ʹ ͕ؔPromiseΛฦ͢͜ͱ͕݅Ͱ͢ ܅ͨͪͬͺΓ ϓϩϛεͩ
ΞδΣϯμ ϓϩϩʔά Promiseͱඇಉظॲཧͷઆ໌ Promiseͷجຊతͳ͍ํ Promiseͷಋೖํ๏ ·ͱΊ
·ͱΊ PromiseͰඇಉظॲཧΛεϚʔτʹॻ͚Δ PromiseຆͲͷϒϥβͰඪ४උ asyncɺawaitΛ͏ҝʹPromiseԽ͕ඞཁ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠