ホームページ > 記事 > ウェブフロントエンド > JavaScript における Promise の種類
タイプミスや文法上の間違いをご容赦ください。私はまだ勉強中です。 ?
Promise は、JavaScript で非同期操作を処理する方法の 1 つです。これらは、現在、将来、または決して利用できない可能性がある値を表します。 Promise には、保留中、履行済み、拒否という 3 つの状態があります。
Pending: Promise の初期状態。これは、操作がまだ進行中であり、まだ完了していないことを表します。
Fulfilled: 操作が正常に完了したときの Promise の状態。 Promise には値があり、使用することができます。
拒否: 操作が失敗したときの Promise の状態。 Promise には失敗の理由があり、catch メソッドを使用して処理できます。
const promise = new Promise((resolve, reject) => { // Imagine fetching user data from an API const user = { name: "Aasim Ashraf", age: 21, }; user ? resolve(user) : reject("User not found"); }); promise .then((user) => console.log(user)) .catch((error) => console.log(error));
API 呼び出しまたは非同期タスクによく使用される、解決または拒否する Promise。
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
すべての Promise が解決されるまで待機します。1 つが失敗すると、チェーン全体が失敗します。一緒に解決する必要がある複数の非同期タスクに最適です。
const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.all([fetchUser, fetchPosts]) .then(([user, posts]) => { console.log(user, posts); }) .catch((error) => console.log(error));
Promise.all の問題は、1 つの Promise が失敗すると、チェーン全体が失敗することです。これを回避するには、Promise.allSettled.
を使用できます。const fetchUser = fetch("/users").then((res) => res.json()); const fetchPosts = fetch("/posts").then((res) => res.json()); Promise.allSettled([fetchUser, fetchPosts]) .then((results) => { results.forEach((result) => { if (result.status === "fulfilled") { console.log("User Data:", result.value); } else { console.log("Error:", result.reason); } }); });
Promise.allSettled は、解決されたか拒否されたかに関係なく、すべての Promise が解決されるまで待機します。ステータス、値、または理由を含むオブジェクトの配列を返します。
const fast = new Promise(resolve => setTimeout(resolve, 1000, "Fast")); const slow = new Promise(resolve => setTimeout(resolve, 2000, "Slow")); Promise.race([fast, slow]) .then((result) => { console.log(result); }) .catch((error) => console.log(error));
解決する最初の Promise の結果 (解決されたか拒否されたか) を返します。最初の利用可能な応答をロードするなど、速度が必要な場合に役立ちます。
const error = new Promise((resolve) => { setTimeout(() => resolve("Error"), 1000); }); const success = new Promise((resolve) => { setTimeout(() => resolve("Success"), 2000); }); Promise.race([error, success]) .then((result) => { console.log(result); }) .catch((error) => console.log("First Rejected",error));
最初の約束が失敗すると、チェーン全体が失敗します。これを回避するには、Promise.any を使用できます。
const promise1 = Promise.reject("Error 1"); const promise2 = new Promise(resolve => setTimeout(resolve, 3000, "Promise 2")); Promise.any([promise1, promise2]) .then((result) => { console.log("First Success",result); }) .catch((error) => console.log("All Rejected",error));
いずれかの Promise が解決されると解決されます。すべての Promise が拒否されるまで、すべての拒否を無視します。残りの結果に関係なく、最初の成功した結果が必要な場合に便利です。
以上がJavaScript における Promise の種類の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。