Promise.resolve()は、与えられた値を解決済みのPromiseオブジェクトに変換する便利なメソッドです。すぐに値を返したい場合や、Promiseチェーンを作成する際に役立ちます。
Promise.resolve()の基本的な使い方
Promise.resolve()は、以下のような構文で使用します:
const promise = Promise.resolve(value);渡された値はPromiseオブジェクトにラップされ、即座に解決された状態になります。
具体的な使用例
1. 単純な値をPromiseにする
const promise = Promise.resolve(42);
promise.then(value => {
console.log(value); // 42
});2. すでにPromiseの場合
すでにPromiseオブジェクトを渡した場合は、そのままそのPromiseが返されます:
const originalPromise = new Promise(resolve => resolve('hello'));
const newPromise = Promise.resolve(originalPromise);
console.log(originalPromise === newPromise); // true3. 非同期処理のチェーン
Promise.resolve('start')
.then(value => value + ' middle')
.then(value => value + ' end')
.then(value => console.log(value)); // "start middle end"Promise.resolve()の主な利点
1. コードの簡潔性:新しいPromiseインスタンスを作成するよりも簡潔に書けます
2. 即時実行:値がすぐに必要な場合に便利
3. 型の統一:異なる型の値を一貫してPromiseとして扱える
よくあるユースケース
APIレスポンスのキャッシュ
let cache = null;
function getData() {
if (cache) {
return Promise.resolve(cache);
}
return fetch('api/data')
.then(response => response.json())
.then(data => {
cache = data;
return data;
});
}条件付きの非同期処理
function conditionalAsync(condition) {
if (condition) {
return Promise.resolve('条件が真の場合');
}
return fetch('api/data');
}注意点
1. Promise.resolve()は常に非同期で実行されます
2. エラーハンドリングは.catch()で行う必要があります
3. thenやcatchのコールバックは、現在の実行コンテキストの後に実行されます
Promise.resolve('test')
.then(value => console.log(value));
console.log('先に実行');
// 出力:
// "先に実行"
// "test"まとめ
Promise.resolve()は、同期的な値を非同期処理のPromiseに変換する強力なツールです。特に:
- 即座にPromiseを解決したい場合
- 既存のコードをPromiseベースに統一したい場合
- 条件付きの非同期処理を実装する場合
に非常に有用です。適切に使用することで、より整理された非同期コードを書くことができます。