メインコンテンツにスキップ
モジュール 7 · レッスン 1 / 4コース内の 25/32~12 min
モジュールのレッスン (1/4)

約束: それは何ですか

Promise は、将来終了する操作の結果を表す値です。 次の 3 つの状態のいずれかになります。

  • 保留中 — 操作はまだ進行中です
  • 満たされました — 正常に終了しました。値があります。
  • 拒否 — 失敗しました、エラーがあります

保留状態を離れると、永久に「解決」されます。

解決済みの Promise を作成する

最も一般的な 2 つの方法 — コンストラクターを使用して「手動」で Promise を作成することはほとんどありません。

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

結果の読み取り: .then / .catch

JS
Promise.resolve(10).then((v) => {
  console.log(v); // 10
});

Promise.reject(new Error('no')).catch((e) => {
  console.log(e.message); // 'no'
});

.then は、解決された値 で呼び出される関数を受け取ります。 .catch は、拒否された場合にエラーで呼び出された関数を受け取ります。

連鎖

すべての .then は順番に Promise を返します。それらをチェーンして、 段階的に価値を高めていきます。

JS
Promise.resolve(5)
  .then((n) => n * 2)
  .then((n) => n + 1)
  .then((n) => console.log(n)); // 11

.then のいずれかがスローされた場合 (または失敗した Promise が返された場合)、実行は 最初の後続の .catch にジャンプします。

コンストラクター (レア)

JS
const p = new Promise((resolve, reject) => {
  if (Math.random() > 0.5) resolve('ok');
  else reject(new Error('no'));
});

コールバックを使用するもの (古い DOM API や setTimeout など) を「約束」する必要がある場合にのみ使用します。

試してみてください

運動#js.m7.l1.e1
試行回数: 0読み込み中…

数値を指定すると、n の 2 倍で解決された Promise を返す `promizedVersion(n)` を定義します。

エディターを読み込み中…
ヒントを表示

Promise.resolve(n * 2) を返す

3 回の試行後に解決策が利用可能になります

復習演習

運動#js.m7.l1.e2
試行回数: 0読み込み中…

数値の Promise を受け取り、数値 + 3 の Promise を返す `incrementThree(p)` を定義します。 .then チェーンを使用します。

エディターを読み込み中…
ヒントを表示

p.then((n) => n + 3)

3 回の試行後に解決策が利用可能になります