は、現在、将来、または決して利用できない可能性がある値を表します。
プロミスのライフサイクル:
保留中: 機能が動作し始めます。
完了: 操作は正常に完了し、結果値が得られました。
拒否: 操作が失敗し、エラー オブジェクトが発生しました。
Promise の構文:
Promise は新しい Promise コンストラクターを使用して作成されます。このコンストラクターは、2 つの引数 (resolve と拒否) を持つ関数を受け取ります。
コード スニペットには、新しい Promise (非同期操作を処理するメソッドを持つ Promise オブジェクト) を返す getUser という関数があります。
Promise コンストラクター内には、データベースからのデータのフェッチなどの非同期操作をシミュレートする setTimeout 関数があります。 Promise には 2 つの主要なメソッドが渡されます:
resolve: 操作が成功したときに呼び出されます。この場合、id === 1 の場合、疑似ユーザー オブジェクト { id: 1、name: "Diana"、email: "Diana@test.com" } を返します。
reject: 操作が失敗したときに呼び出されます。 ID が 1 でない場合、Promise は拒否され、「ユーザーが見つかりません...」というエラー メッセージが表示されます。
resolve 関数と拒否関数は、Promise のコンテキストで return ステートメントのように機能し、呼び出し元が操作の成功または失敗を処理できるようにします。
Promise は連鎖させることができ、一連の非同期操作を順番に実行できます。
この例では、複数の Promise を連鎖させて、データの取得を段階的にシミュレートしています。
まず、getUser(1) を呼び出してユーザー データを取得します。問題がなければ、次のステップに進みます。
2 番目に、user.id を取得し、それを使用して getOrders(user.id) を呼び出してそのユーザーの注文を取得します。
-3 番目に、リストから 2 番目の注文 (orders[1]) を選択し、getOrderDetails(orders[1]) を使用してその詳細を取得します。
いずれかの時点で何か問題が発生した場合 (ユーザーが見つからない、注文が見つからないなど)、エラーは .catch() ブロックで捕捉され、表示されます。
結果:
このアプローチにより、コードが乱雑になる代わりに、非同期タスクをクリーンで段階的な方法で簡単に操作できるようになります。
Promise.all(): 複数の Promise を並行して実行し、すべてが解決されるまで待機します。
Promise.all([promise1, promise2]) .then((results) => { console.log(results); // Array of all fulfilled values });
例:
(このアプローチを読んでコールバックと比較することをお勧めします)
以上がJavaScriptでのお約束の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。