Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20251117-slide.pdf

Avatar for yy05853 yy05853
November 29, 2025

 20251117-slide.pdf

Avatar for yy05853

yy05853

November 29, 2025

Other Decks in Programming

Transcript

  1. Promise とは 概要 Promise は、JavaScript で「未来の値」を扱うための仕組み。 Promise オブジェクトを作成すると、 実際に値が返る前の“ 仮の箱”

    が作られます。 呼び出し元は結果を待たずに次の処理を進められます。 ( =非同期処理ができる)
  2. コード例1 API 呼び出し fetch("http://localhost:8080/api/holiday") // fetch()はPromiseオブジェクトを返す .then((res) => res.json()) //

    then()は非同期処理が成功したときに動く .then((data) => { setHolidays(data); }) .catch((e) => { // catch()は非同期処理が失敗した時に動く setError(e.message); });
  3. 内部構造 種類 名前 備考 状態 pending / fulfilled / rejected

    進行中・成功・失敗を表す 関数 resolve() / reject() 状態を変更する メソッド then() / catch() / finally() 結果を受け取る処理を登録する
  4. コード例2 Promise オブジェクトを自分で定義する場合 const promise = new Promise((resolve, reject) =>

    { const success = Math.random() > 0.5; // 50%で成功・失敗をランダムに決定する if (success) { resolve("データ取得成功!"); } else { reject("ネットワークエラー!"); } }); promise .then(result => console.log("成功:", result)) // "成功: データ取得成功!" .catch(error => console.log("失敗:", error)); // "失敗: ネットワークエラー!"
  5. ここで疑問 const promise = new Promise((resolve, reject) => { //

    略 if (success) { resolve("データ取得成功!"); } else { reject("ネットワークエラー!"); } }); // 略 new Promise() のカッコの中は何をしている?
  6. new Promise() のカッコの中身 まず、 new Promise() のカッコの中身はPromise オブジェクトのコン ストラクタの引数。これはJava と同じ。

    1 つ目の違いは、JavaScript ではコンストラクタの引数に関数を与えら れるということ。( コールバック関数) Java でコンストラクタの引数にメソッドを与えることはできない。( メ ソッドを値として扱えないから) 2 つ目の違いは、コンストラクタの引数に書いている関数に引数を与 えられるということ。 この書き方もJava ではできない。
  7. 結局、 new Promise() で何をしているのか? 1. new Promise() を呼ぶと、JavaScript エンジンが resolve

    と reject という 状態変更関数 を作って、コンストラクタに渡してくれる。 2. 1. で受け取った2 つの関数を使って、非同期処理が成功したときと 失敗したときの動きを定義している この動きは、 「成功/ 失敗時の動作を後から決める」仕組み。 これは、Java のインターフェースを使って「実装を後から決める」仕 組みと似ている。
  8. まとめ:JavaScript とJava の比較 JavaScript Java 動作の渡し方 関数をそのまま渡す インターフェースで実装を 渡す 言語の思想

    とりあえず動く、柔 軟 型安全・厳密さ プログラミング 文化 関数を組み合わせる オブジェクトを構成する