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); // true

3. 非同期処理のチェーン

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ベースに統一したい場合
  • 条件付きの非同期処理を実装する場合

に非常に有用です。適切に使用することで、より整理された非同期コードを書くことができます。