JavaScript Promises 和 Async/Await 详解:ES6+ 异步编程

Javascript教程 2025-10-16

介绍

在 JavaScript    中,某些任务可能需要一些时间才能完成,例如从网站获取数据或加载文件。如果等待每个任务完成后再执行下一个任务,程序就会运行缓慢。这时异步编程就派上用场了。

为了更轻松地处理这类任务,ES6+    引入了两个强大的工具:PromisesAsync/Await。这些功能可帮助您管理基于时间的任务,而不会冻结程序。

您将学到什么

阅读完本文后,您将了解:

  • 异步编程在 JavaScript 中的含义。

  • 承诺如何运作以及为何它如此重要。

  • 如何使用Async/Await简化异步代码。

  • Promises 和 Async/Await 之间的区别。

  • 何时以及为何在实际项目中使用每一个。

现在您已经了解了接下来的内容,让我们从理解 Promises 开始。

理解承诺

JavaScript    中的Promise就像现实生活中的承诺一样。它代表着将来会发生的事情;它要么成功要么失败

简单来说,Promise 是一个处理异步任务的对象。它有三种可能的状态:

  1. 待处理:任务仍在运行。

  2. 已完成:任务成功完成。

  3. 拒绝:任务失败。

以下是一个例子:

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    开发者一样编写更快、更简洁、更可靠的代码。

祝你编码愉快!