JavaScript Promises 简明教程:带有真实示例的初学者指南
JavaScript 中的 Promise 是什么?
在 JavaScript 中,**Promise** 是管理异步任务的强大工具。它是一个表示可能现在可用、将来可用或永远不可用的值的对象。Promise 使处理以下任务变得更容易:
承诺可以处于以下三种状态之一:
Promises 如何工作?(初学者友好的解释)
让我们用咖啡馆来打个比方:
一个简单的 JavaScript Promise 示例
使用 JavaScript 编写的方法如下:
const coffeePromise = new Promise((resolve, reject) => { const coffeeReady = true; // Try changing this to false to simulate rejection. setTimeout(() => { if (coffeeReady) { resolve("Your coffee is ready! ☕"); } else { reject("Sorry, the coffee machine is broken. 😢"); } }, 2000); // Simulates a 2-second wait }); // Handling the Promise coffeePromise .then((message) => console.log(message)) // If resolved .catch((error) => console.error(error)) // If rejected .finally(() => console.log("Thanks for visiting our café! 😊"));
JavaScript 中 Promise 的真实示例
1. 使用出租车应用程序预订车程 🚗
当您叫车时:
function bookRide() { console.log("Searching for a ride... 🔄 (Pending)"); return new Promise((resolve, reject) => { setTimeout(() => { const driverAvailable = Math.random() > 0.5; // 50% chance of success if (driverAvailable) { resolve("Driver found! 🚗💨"); } else { reject("No drivers available. 😔"); } }, 3000); // Simulate search delay }); } // Using the Promise bookRide() .then((message) => { console.log("Ride Status: Resolved ✅"); console.log(message); }) .catch((error) => { console.log("Ride Status: Rejected ❌"); console.error(error); }) .finally(() => { console.log("Thanks for using our ride service! 😊"); });
2.下载文件📥
下载文件时:
function downloadFile(fileName) { console.log(`Downloading "${fileName}"... 🔄 (Pending)`); return new Promise((resolve, reject) => { setTimeout(() => { const downloadSuccess = Math.random() > 0.7; // 30% success rate if (downloadSuccess) { resolve(`"${fileName}" downloaded successfully! 📂`); } else { reject(`Failed to download "${fileName}". Check your connection. 🚨`); } }, 2000); // Simulates download time }); } // Using the Promise downloadFile("example.pdf") .then((message) => { console.log("Download Status: Resolved ✅"); console.log(message); }) .catch((error) => { console.log("Download Status: Rejected ❌"); console.error(error); }) .finally(() => { console.log("Thanks for using our download manager! 📥"); });
示例 3:规划公路旅行
计划旅行时,步骤如下:
每个步骤可以是**待定**、**已解决**或**已拒绝**。
function packBags() { console.log("Packing bags... 🔄 (Pending)"); return new Promise((resolve) => { setTimeout(() => resolve("Bags packed! 🎒 ✅"), 1000); }); } function bookCab() { console.log("Booking a cab... 🔄 (Pending)"); return new Promise((resolve, reject) => { const cabAvailable = Math.random() > 0.4; // 60% chance of success setTimeout(() => { if (cabAvailable) { resolve("Cab booked! 🚕 ✅"); } else { reject("No cabs available. 😔 ❌"); } }, 2000); }); } function reachDestination() { console.log("Heading to destination... 🔄 (Pending)"); return new Promise((resolve) => { setTimeout(() => resolve("Reached destination! 🏖️ ✅"), 3000); }); } // Chaining Promises packBags() .then((message) => { console.log("Step 1: Resolved ✅"); console.log(message); return bookCab(); }) .then((message) => { console.log("Step 2: Resolved ✅"); console.log(message); return reachDestination(); }) .then((message) => { console.log("Step 3: Resolved ✅"); console.log(message); }) .catch((error) => { console.log("Status: Rejected ❌"); console.error(error); }) .finally(() => { console.log("Trip preparation done. Safe travels! 🚀"); });
为什么在 JavaScript 中使用 Promises?
Promises 解决了 JavaScript 中的一个常见问题:**回调地狱**(嵌套回调使你的代码难以阅读和调试)。
**使用 Promises 的好处:**
关于 JavaScript Promises 的最终思考
Promises 彻底改变了 JavaScript 中异步任务的管理方式。无论您是预订行程、下载文件还是在线观看电影,Promises 都能让您的代码优雅而高效地处理这些任务。
**有问题吗?** 在下面发表评论!让我们一起掌握 JavaScript。💬
让我们连接 LinkedIn