モジュール 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 回の試行後に解決策が利用可能になります