Maafkan saya atas Kesilapan Taipo dan Tatabahasa, saya masih belajar. ?
Janji ialah cara untuk mengendalikan operasi tak segerak dalam JavaScript. Mereka mewakili nilai yang mungkin tersedia sekarang, atau pada masa hadapan, atau tidak pernah. Janji mempunyai tiga keadaan: belum selesai, dipenuhi dan ditolak.
Belum selesai: Keadaan awal janji. Ini menunjukkan bahawa operasi masih berjalan dan belum selesai.
Ditepati: Keadaan janji apabila operasi telah berjaya diselesaikan. Janji itu mempunyai nilai, dan ia tersedia untuk digunakan.
Ditolak: Keadaan janji apabila operasi telah gagal. Janji mempunyai sebab untuk kegagalan, dan ia boleh dikendalikan menggunakan kaedah tangkapan.
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));
Janji yang sama ada menyelesaikan atau menolak yang sering digunakan untuk panggilan API atau tugas async.
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));
Menunggu semua janji untuk diselesaikan, jika salah satu gagal, seluruh rantai gagal. Terbaik untuk berbilang tugas async yang perlu diselesaikan bersama.
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));
Masalah dengan Janji.semuanya ialah jika satu janji gagal, seluruh rantai gagal. Untuk mengelakkan perkara ini, anda boleh menggunakan 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 menunggu semua janji untuk diselesaikan, sama ada ia diselesaikan atau ditolak. Ia mengembalikan tatasusunan objek dengan status dan nilai atau sebab.
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));
Mengembalikan hasil janji pertama untuk diselesaikan, sama ada diselesaikan atau ditolak. Berguna apabila anda memerlukan kelajuan, seperti memuatkan respons pertama yang tersedia.
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));
Jika janji pertama gagal, seluruh rantai gagal. Untuk mengelakkan ini, anda boleh menggunakan 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));
Menyelesaikan apabila mana-mana satu Janji diselesaikan. Abaikan semua penolakan sehingga semua janji ditolak. Berguna apabila anda memerlukan hasil pertama yang berjaya, tanpa mengira yang lain.
Atas ialah kandungan terperinci Jenis Janji dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!