在前端开发中,Promise 有三种状态:
-
pending (等待): Promise 初始化时的状态。既没有被 fulfilled (成功),也没有被 rejected (失败)。 在这个状态下,Promise 的 then 方法和 catch 方法都不会被执行。
-
fulfilled (已完成): Promise 的异步操作成功完成后的状态。这时,then 方法中的回调函数会被执行,并将异步操作的结果作为参数传递给回调函数。
-
rejected (已拒绝): Promise 的异步操作失败后的状态。这时,catch 方法中的回调函数会被执行,并将异步操作的错误原因作为参数传递给回调函数。
状态变化:
Promise 的状态只能从 pending 变为 fulfilled 或 rejected,一旦状态变为 fulfilled 或 rejected,就永远不会再改变。 这保证了 Promise 的结果的确定性和一致性。 这被称为状态机。 状态转换图如下:
pending ---------> fulfilled
|
---------> rejected
状态变化的触发:
-
resolve()
方法: 当异步操作成功完成时,调用resolve()
方法,将 Promise 的状态变为 fulfilled,并将结果作为参数传递给 then 方法的回调函数。 -
reject()
方法: 当异步操作失败时,调用reject()
方法,将 Promise 的状态变为 rejected,并将错误原因作为参数传递给 catch 方法的回调函数。
示例 (JavaScript):
const myPromise = new Promise((resolve, reject) => {
// 模拟一个异步操作
setTimeout(() => {
const success = Math.random() < 0.5; // 50% 的概率成功
if (success) {
resolve("操作成功!"); // 状态变为 fulfilled
} else {
reject("操作失败!"); // 状态变为 rejected
}
}, 1000);
});
myPromise
.then(result => {
console.log(result); // 输出 "操作成功!" 或抛出错误
})
.catch(error => {
console.error(error); // 输出 "操作失败!"
});
在这个例子中,setTimeout
模拟了一个异步操作。 1 秒后,随机决定是调用 resolve()
还是 reject()
,从而改变 Promise 的状态。 then
方法处理成功的情况,catch
方法处理失败的情况。 Promise 的状态变化是单向的,不可逆的。
总而言之,理解 Promise 的三种状态及其单向转换是掌握 Promise 的关键。 这使得你可以编写更清晰、更易于维护的异步 JavaScript 代码。
标签:异步,状态,rejected,fulfilled,promise,Promise,操作,哪几种 From: https://www.cnblogs.com/ai888/p/18606329