>100 Views
November 17, 25
スライド概要
Promise から見るJavaとJavaScriptの 違い
Promise 概要 とは は、JavaScriptで「未来の値」を扱うための仕組み。 Promise オブジェクトを作成すると、 実際に値が返る前の“仮の箱”が作られます。 呼び出し元は結果を待たずに次の処理を進められます。 ( =非同期処理ができる ) Promise
コード例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);
});
内部構造 種類 名前 備考 状態 pending / fulfilled / rejected 進行中・成功・失敗を表す 関数 resolve() / reject() 状態を変更する メソッド then() / catch() / finally() 結果を受け取る処理を登録する
コード例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)); // "失敗: ネットワークエラー!"
ここで疑問 const promise = new Promise((resolve, reject) => { // 略 if (success) { resolve("データ取得成功!"); } else { reject("ネットワークエラー!"); } }); // 略 new Promise() のカッコの中は何をしている?
new Promise() のカッコの中身 まず、 のカッコの中身はPromiseオブジェクトのコン ストラクタの引数。これはJavaと同じ。 1 つ目の違いは、 JavaScript ではコンストラクタの引数に関数を与えら れるということ。(コールバック関数) Java でコンストラクタの引数にメソッドを与えることはできない。 ( メ ソッドを値として扱えないから) 2 つ目の違いは、コンストラクタの引数に書いている関数に引数を与 えられるということ。 この書き方もJavaではできない。 new Promise()
結局、 new Promise() で何をしているのか? を呼ぶと、JavaScriptエンジンが と という 状態変更関数 を作って、コンストラクタに渡してくれる。 2. 1. で受け取った 2 つの関数を使って、非同期処理が成功したときと 失敗したときの動きを定義している この動きは、「成功/失敗時の動作を後から決める」仕組み。 これは、Javaのインターフェースを使って「実装を後から決める」仕 組みと似ている。 1. new Promise() resolve reject
まとめ:JavaScriptとJavaの比較 JavaScript 動作の渡し方 Java インターフェースで実装を 関数をそのまま渡す 渡す とりあえず動く、柔 型安全・厳密さ 軟 言語の思想 プログラミング 関数を組み合わせる オブジェクトを構成する 文化