Promise
和 async/await
是 JavaScript 中处理异步操作的两种重要方式。
一、基本语法
Promise
Promise 是一种表示某个异步操作结果的对象。它有三种状态:
- pending(进行中):初始状态,既不是成功,也不是失败。
- fulfilled(已成功):操作成功完成。
- rejected(已失败):操作失败。
Promise 的基本用法如下:
const promise = new Promise((resolve, reject) => {
// 异步操作
if (/* 操作成功 */) {
resolve(value); // 将 Promise 状态改为 fulfilled,并将结果作为参数传递给后续的 then 方法
} else {
reject(error); // 将 Promise 状态改为 rejected,并将错误信息作为参数传递给后续的 catch 方法
}
});
promise
.then(value => {
// 处理成功的结果
})
.catch(error => {
// 处理失败的结果
});
async/await
async/await
是基于 Promise 实现的语法糖,让异步操作的代码看起来更像同步代码。async
函数返回一个 Promise 对象,await
关键字用于等待 Promise 的结果。
基本用法如下:
// 使用 async 关键字声明一个异步函数
async function asyncFunction() {
try {
// 使用 await 关键字等待 Promise 结果
const result = await somePromiseFunction();
// 处理成功的结果
} catch (error) {
// 处理失败的结果
}
}
// 调用异步函数
asyncFunction();
区别与联系
Promise
是一种异步操作的表示方式,而async/await
是基于 Promise 的语法糖,让异步代码更易读、易写。Promise
需要使用.then()
和.catch()
方法处理结果,而async/await
使用try/catch
语句处理结果。Promise
可以在多个地方使用.then()
方法链式处理,而async/await
只能在async
函数内部使用。
总结:async/await
是基于 Promise
的语法糖,它简化了异步操作的处理方式,使代码更加简洁易读。
二、举例
下面是一个完整的例子,展示了如何使用 Promise
和 async/await
来处理异步操作。我们将模拟一个简单的场景:从服务器获取用户信息,然后根据用户 ID 获取用户的帖子。
1、使用 Promise
// 模拟异步请求函数
function fetchUserInfo(userId) {
return new Promise((resolve, reject) => {
setTimeout(()