Promise 的基本概念
了解 JavaScript 中的 Promise,包括 Promise 的生命周期及其各个状态。
简介
虽然 Promise 通常与异步操作相关联,但本质上它们只是值的占位符。这个值可能已经确定,也可能来自一个异步操作的结果。与订阅事件或向函数传递回调函数不同,函数可以直接返回一个 Promise,例如:
fetch() 的语法
1// fetch() 承诺在未来某个时刻完成 2const promise = fetch("books.json");
fetch() 是 JavaScript 运行时中常用的工具函数,用于发起网络请求。调用 fetch() 并不会立即完成网络请求;实际的请求会在稍后发生。相反,该函数会立即返回一个 Promise 对象(在本例中存储在 promise 变量中,但我们也可以给它任意命名),用来表示这个异步操作,以便我们将来可以对其进行处理。我们何时能够获取到结果,完全取决于 Promise 生命周期的执行情况。
Promise 的生命周期
每个 Promise 都经历一个短暂的生命周期,起始于 pending(待定) 状态,表示该 Promise 尚未完成。处于 pending 状态的 Promise 被认为是未决的。在上一示例中,一旦 fetch() 函数返回,其返回的 Promise 就处于 pending 状态。当 Promise 完成后,它就进入已决状态,并转变为以下两种可能的状态之一(见下图):
- Fulfilled(已实现): Promise 成功完成。
- Rejected(已拒绝): Promise 未能成功完成,原因可能是错误或其他因素。
内部的 [[PromiseState]] 属性会被设置为 pending、fulfilled 或 rejected,以反映 Promise 的当前状态。这个属性不会暴露在 Promise 对象上,因此我们无法通过程序直接判断 Promise 处于哪种状态。但我们可以通过使用 then() 方法,在 Promise 状态发生变化时执行特定操作。