介绍
在 JavaScript 中,某些任务可能需要一些时间才能完成,例如从网站获取数据或加载文件。如果等待每个任务完成后再执行下一个任务,程序就会运行缓慢。这时异步编程就派上用场了。
为了更轻松地处理这类任务,ES6+ 引入了两个强大的工具:Promises和Async/Await。这些功能可帮助您管理基于时间的任务,而不会冻结程序。
您将学到什么
阅读完本文后,您将了解:
异步编程在 JavaScript 中的含义。
承诺如何运作以及为何它如此重要。
如何使用Async/Await简化异步代码。
Promises 和 Async/Await 之间的区别。
何时以及为何在实际项目中使用每一个。
现在您已经了解了接下来的内容,让我们从理解 Promises 开始。
理解承诺
JavaScript 中的Promise就像现实生活中的承诺一样。它代表着将来会发生的事情;它要么成功,要么失败。
简单来说,Promise 是一个处理异步任务的对象。它有三种可能的状态:
待处理:任务仍在运行。
已完成:任务成功完成。
拒绝:任务失败。
以下是一个例子:
let myPromise = new Promise((resolve, reject) => { let success = true; if (success) { resolve("Task completed!"); } else { reject("Something went wrong!"); }});myPromise .then(result => console.log(result)) .catch(error => console.log(error));在这个例子中,如果success为真,承诺就会解决并打印“任务完成!”否则,它会捕获一个错误。
与回调等传统方法相比,Promise 有助于以更简洁的方式管理异步操作。但是,随着代码量越来越大,链接多个.then()调用可能会显得杂乱无章。这时,Async/Await就派上用场了。
使用 Async/Await 简化异步代码
Async/Await是一种更简单、更清晰的处理 Promises 的方式。它将你的异步代码变得更像普通代码,更容易理解。
该async关键字将一个函数转换为返回 Promise 的函数,同时await暂停该函数直到该 Promise 被解决或拒绝。
以下是使用 Async/Await 重写的相同示例:
async function fetchData() { try { let result = await myPromise; console.log(result); } catch (error) { console.log(error); }}fetchData();看看它有多简单!使用await,您可以等待 Promise 完成,而无需使用.then()或.catch()。
现在让我们看看在现实生活中你可以在哪里使用它。
现实生活中的例子
假设您需要从 API 获取天气信息并将其显示给用户。
使用 Async/Await 可以实现以下功能:
async function getWeather() { try { let response = await fetch("https://api.weather.com/data"); let data = await response.json(); console.log("Today's weather:", data); } catch (error) { console.log("Failed to load weather data:", error); }}getWeather();这里,fetch()返回一个 Promise。该await关键字暂停函数,直到数据到达,使代码更易于阅读和管理。
Promises 与 Async/Await
Promises 和 Async/Await 都做同样的事情:处理异步操作,但 Async/Await 使您的代码更简洁、更适合初学者。
结论
Promises 和 Async/Await 是现代 JavaScript 中的关键特性,它们使异步任务的处理更加顺畅高效。Promises 引入了一种结构化的方式来处理未来的结果,而 Async/Await 则使其更加简单易读。
如果您是 JavaScript 新手,请先学习 Promises 的工作原理,然后再学习 Async/Await。理解这两者后,您将能够像现代 JavaScript 开发者一样编写更快、更简洁、更可靠的代码。
祝你编码愉快!