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 / Let's try implementing Promise
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
shimataro
November 28, 2025
Technology
39
0
Share
作って理解するPromise / Let's try implementing Promise
プロによる本気の攻略本『JavaScript/TypeScript実力強化書』 - FL#115
https://forkwell.connpass.com/event/375550/
shimataro
November 28, 2025
More Decks by shimataro
See All by shimataro
Single Executable Applicationsについて / About Single Executable Applications
shimataro
0
2k
パッケージ開発者の苦悩 -JavaScriptランタイム群雄割拠- / distress of package developer
shimataro
0
740
An introduction to Node.js
shimataro
0
310
KFDのススメ / About KFD
shimataro
3
850
Node.js v12のES Modules / ES Modules on NodeJS v12
shimataro
1
1.2k
おまいらちゃんとリソース解放してますか / Remember to close resources!
shimataro
2
1.2k
CJSとESMとnpmパッケージ / CommonJS and ES Modules and npm package
shimataro
0
840
BigInt あれこれ / overview about BigInt
shimataro
0
960
dynamic import あれこれ / dynamic import - overview and pitfalls
shimataro
1
860
Other Decks in Technology
See All in Technology
TanStack Start エコシステムの現在地 / TanStack Start Ecosystem 2026
iktakahiro
1
310
【関西電力KOI×VOLTMIND 生成AIハッカソン】空間AIブレイン ~⼤阪おばちゃんフィジカルAIに続く道~
tanakaseiya
0
160
OCI技術資料 : ロード・バランサ 概要 - FLB・NLB共通
ocise
4
27k
Strands Agents × Amazon Bedrock AgentCoreで パーソナルAIエージェントを作ろう
yokomachi
2
160
20260326_AIDD事例紹介_ULSC.pdf
findy_eventslides
0
540
Oracle Cloud Infrastructure:2026年3月度サービス・アップデート
oracle4engineer
PRO
0
380
ふりかえりを 「あそび」にしたら、 学習が勝手に進んだ / Playful Retros Drive Learning
katoaz
0
110
OPENLOGI Company Profile
hr01
0
83k
ログ基盤・プラグイン・ダッシュボード、全部整えた。でも最後は人だった。
makikub
3
250
出版記念イベントin大阪「書籍紹介&私がよく使うMCPサーバー3選と社内で安全に活用する方法」
kintotechdev
0
150
AIがコードを書く時代の ジェネレーティブプログラミング
polidog
PRO
3
390
ZOZOTOWNリプレイスでのSkills導入までの流れとこれから
zozotech
PRO
4
2.5k
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
11k
Tell your own story through comics
letsgokoyo
1
880
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Making Projects Easy
brettharned
120
6.6k
Statistics for Hackers
jakevdp
799
230k
What's in a price? How to price your products and services
michaelherold
247
13k
Typedesign – Prime Four
hannesfritz
42
3k
The Cult of Friendly URLs
andyhume
79
6.8k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The browser strikes back
jonoalderson
0
890
Transcript
作って理解する Promise 小田島 太郎 / @shimataro999 プロによる本気の攻略本『 JavaScript/TypeScript実力強化書』 - FL#115
https://forkwell.connpass.com/event/375550/
自己紹介 🪪小田島 太郎 / 𝕏 @shimataro999 🏢さくらインターネット所属 🧠AI系サービスの開発マネージャー 🃏副業で手品やってます 11/16
JSConf JP TrackC司会やってました
この発表について 対象者 非同期処理を使った プログラミング経験あり Promiseを深く理解したい Promiseの基本的な使い方や メリットを理解している
この発表について 今回お話しする内容 Promise解剖 どういう仕組み? 実際に作ってみる ⭕コンストラクター / then() / race()
❌catch() / finally() / all() / ...
Yakusokuクラスを作ります!
全体のソースコードはこちら Yakusokuのソースコード https://github.com/shimataro/yakusoku 資料も後で公開します!
事前知識
用語 内部状態 履行 / fulfilled 非同期処理が成功した 拒否 / rejected 非同期処理が失敗した
待機 / pending まだ非同期処理が終わっていない (成功も失敗もしていない) 初期状態
用語 内部状態に関するもの 解決 / resolved ≒履行(fulfilled) 厳密には違う 決定 / settled
非同期処理が履行または拒否された
状態について 内部状態 履行 / fulfilled 非同期処理が成功した 拒否 / rejected 非同期処理が失敗した
待機 / pending まだ非同期処理が終わっていない (成功も失敗もしていない) 一度決定したら それ以降は変わらない
ここまでの実装
用語 その他 Identity関数 / 恒等関数 入力値をそのまま返す関数 Thrower関数 入力値を例外としてスローする関数 Thenable then()メソッドがあるクラスやオブジェクト(
Thenable ⊃ Promise) awaitはThenableなオブジェクト全般 に対して適用できる
ヘルパー関数 Identity関数 / Thrower関数 Thenableかどうか判定 Thenableならそのまま返す そうでなければThenableにする
コンストラクター
Promiseの使い方おさらい 引数として、関数を1つ受け取る 関数は、引数として関数を2つ受け取る 非同期処理が履行された時に呼ぶ関数 非同期処理が拒否された時に呼ぶ関数
コンストラクターに追加! すでに決定されていたら何もしない executor() 内部で例外が発生した場合の処理
then() の実装
then() おさらい 関数引数を2つ受け取る 非同期処理が履行されたら1番目の関数(onFulfilled)をコール 非同期処理が拒否されたら2番目の関数(onRejected)をコール Promiseチェーン 呼び出した関数の戻り値(または関数から発生した例外) を元にしたPromiseオブジェクトを返す
Promiseチェーン promiseFunction() .then(foo , undefined) .then(bar , undefined) .then(undefined, baz)
.then(qux , undefined); fooが履行された時の流れ fooが拒否された時の流れ catch(baz)と同じ
こう! promiseFunction() .then(foo , thrower) .then(bar , thrower) .then(identity ,
baz) .then(qux , thrower); fooが履行された時の流れ fooが拒否された時の流れ
とりあえずこんな感じか・・・? 引数省略時はそれぞれ Identity関数とThrower関数 履行時と拒否時に 渡された引数をコール
とりあえずこんな感じか・・・? ❌then()コール時点で待機状態だと 何も行わずに終了してしまう ❌Promise(Yakusoku)チェーンが できない
待機状態だった時の処理 then()コール時の引数を保持しておく
待機状態だった時の処理 決定されたら保持した関数をコール
Yakusokuチェーン(ちょっとややこしい!) 待機なら新しいYakusokuオブジェクトを作成 resolve, rejectも保持対象 履行/拒否なら値をThenableにして返す 例外発生時は拒否状態のYakusokuを返す
Yakusokuチェーン(ちょっとややこしい!) 保持したresolve()やreject()をコールするよう変更 戻り値がThenableかどうか、例外が発生したかなどを考慮 reject側もほぼ同様なので省略
race()の実装
race()の仕様 複数のYakusokuオブジェクトのうち 最初に決定されたものを戻り値とする
race()の実装 最初に決定されたものが採用される!
まとめ
話したこと Promiseを実装 コンストラクター / then() / race() この先はキミの目で確かめてくれ! 3つの状態 待機
/ 履行 / 拒否 一度決定されたら変わらない
None