1.定义
Promise 是 JavaScript 中用于异步编程的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。
2.语法
let myPromise = new Promise((resolve, reject) => {
// 异步操作
if (/* 异步操作成功 */) {
resolve(value); // 将 Promise 的状态变为 Fulfilled
} else {
reject(error); // 将 Promise 的状态变为 Rejected
}
});
参数
1.Pending(进行中):初始状态,既不是成功,也不是失败。
2.Fulfilled(已成功):意味着操作成功完成。
3.Rejected(已失败):意味着操作失败。
tips:Promise 一旦从 Pending 状态变为 Fulfilled 或 Rejected 状态,就不会再变,这种状态称为“settled”(已定型)。
3.示例
基本的 Promise 示例
// 创建一个 Promise
let myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
// 模拟异步操作成功
resolve('Promise 成功');
}, 2000);
});
// 使用 then 处理 Promise
myPromise.then((value) => {
console.log(value); // 输出:Promise 成功
}).catch((error) => {
console.error(error); // 处理错误
});
Promise 提供了 .then()、.catch() 和 .finally() 方法来处理异步操作的结果:
.then(onFulfilled, onRejected):接收两个函数参数,第一个用于处理成功的情况,第二个用于处理失败的情况。
.catch(onRejected):只接收一个函数参数,用于处理失败的情况。
.finally(onFinally):无论成功或失败都会执行,通常用于清理工作。
链式调用 Promise
let promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise1 成功');
}, 1000);
});
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Promise2 成功');
}, 2000);
});
promise1
.then((value) => {
console.log(value); // 输出:Promise1 成功
return promise2;
})
.then((value) => {
console.log(value); // 输出:Promise2 成功
})
.catch((error) => {
console.error(error); // 处理错误
});
4.静态方法
Promise 还有一些静态方法,如 Promise.all() 和 Promise.race(),用于处理多个 Promise:
Promise.all(iterable):接收一个 Promise 对象的数组,只有当所有的 Promise 都成功时,才会返回一个成功的 Promise,如果有一个失败,则立即返回失败的 Promise。
Promise.race(iterable):同样接收一个 Promise 对象的数组,但只要有一个 Promise 完成(无论是成功还是失败),就返回那个 Promise 的结果。
5.使用场景
Promise 广泛应用于需要处理异步操作的场景,如网络请求、文件读写、定时器等。
Promise 是现代 JavaScript 异步编程的核心,它简化了异步代码的写法,使得代码更加清晰和易于维护。随着 ES2017 引入的 async/await 语法,Promise 的使用变得更加简洁和直观。