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
300
Promise完全攻略
kaidouji85
October 14, 2016
Tweet
Share
More Decks by kaidouji85
See All by kaidouji85
一発芸!!なんちゃってローカライズ
kaidouji85
0
47
AWSだけでネット対戦できるブラウザゲームを作った話
kaidouji85
0
50
GitHub CopilotでJavaScript開発効率を爆上げする
kaidouji85
0
93
Serverless + Fargate構成で継続的デリバリーの速度を劇的に改善した話
kaidouji85
0
870
サーバーレスアーキテクチャこそ"ヘキサゴナルアーキテクチャ"
kaidouji85
0
91
サーバーレスでターンベース制のネット対戦ゲームを作った話
kaidouji85
0
600
CDKで構築したFargateのデプロイ時間を改善した話
kaidouji85
2
520
ブラウザゲームで視聴者参加型のゲーム配信
kaidouji85
0
320
JSだけでバックエンド環境構築、IaC、自動デプロイまでやってみた話
kaidouji85
0
360
Other Decks in Technology
See All in Technology
60以上のプロダクトを持つ組織における開発者体験向上への取り組み - チームAPIとBackstageで構築する組織の可視化基盤 - / sre next 2025 Efforts to Improve Developer Experience in an Organization with Over 60 Products
vtryo
2
370
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
240
SEQUENCE object comparison - db tech showcase 2025 LT2
nori_shinoda
0
150
Delegating the chores of authenticating users to Keycloak
ahus1
0
160
【LT会登壇資料】TROCCO新コネクタ「スマレジ」を活用した直営店データの分析
kazari0425
1
110
【Oracle Cloud ウェビナー】インフラのプロフェッショナル集団KELが考えるOCIでのソリューション実現
oracle4engineer
PRO
1
100
How Do I Contact HP Printer Support? [Full 2025 Guide for U.S. Businesses]
harrry1211
0
120
データ基盤からデータベースまで?広がるユースケースのDatabricksについて教えるよ!
akuwano
3
130
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
170
Operating Operator
shhnjk
1
600
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
6
13k
Claude Code に プロジェクト管理やらせたみた
unson
6
4.5k
Featured
See All Featured
A Tale of Four Properties
chriscoyier
160
23k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
310
The World Runs on Bad Software
bkeepers
PRO
69
11k
Automating Front-end Workflow
addyosmani
1370
200k
Agile that works and the tools we love
rasmusluckow
329
21k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Become a Pro
speakerdeck
PRO
29
5.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
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Խ͕ඞཁ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠