Promise 函数
Promise 是 JavaScript 中用于处理异步操作的对象,它代表了一个尚未完成但最终会被解决的任务。主要用于解决回调地狱、处理异步任务的结果和错误。
-
Promise 对象具有以下三个状态:
-
pending:初始状态,表示任务尚未完成或被拒绝。
-
fulfilled:代表任务成功完成,并传递一个结果值。
-
rejected:代表任务失败或被拒绝,并传递一个错误值。
-
创建 Promise
可以使用 new Promise() 构造函数来创建一个 Promise 对象。构造函数接受一个执行器函数作为参数,该函数有两个参数:resolve 和 reject。通过调用这两个参数,可以将 Promise 设置为 fulfilled 状态或 rejected 状态。
示例:
const promise = new Promise((resolve, reject) => {
// 模拟异步操作
setTimeout(() => {
const data = 'Hello, World!';
if (data) {
resolve(data); // 将 Promise 设置为 fulfilled 状态
} else {
reject('Error'); // 将 Promise 设置为 rejected 状态
}
}, 1000);
});
使用 Promise
.then() 方法可以在 Promise 对象状态为 fulfilled 时执行回调函数。回调函数的参数是上一个 Promise 对象传递的结果值。
示例:
promise.then((data) => {
console.log(data); // 在状态为 fulfilled 时输出结果值
});
.catch() 方法可以在 Promise 对象状态为 rejected 时执行回调函数。回调函数的参数是上一个 Promise 对象传递的错误值。
示例:
promise.catch((error) => {
console.error(error); // 在状态为 rejected 时输出错误值
});
.finally()方法可以在 Promise 对象无论状态是 fulfilled 还是 rejected 时都执行回调函数。
示例:
promise.finally(() => {
console.log('Promise completed'); // 无论状态如何,都会输出该信息
});
Promise 链式调用
Promise 还支持链式调用,可以根据一个 Promise 对象的结果返回另一个 Promise 对象。
示例:
const fetchData = () => {
return new Promise((resolve, reject) => {
// 模拟异步操作
setTimeout(() => {
const data = 'Hello, World!';
if (data) {
resolve(data);
} else {
reject('Error');
}
}, 1000);
});
};
fetchData()
.then((data) => {
console.log(data);
return data.toUpperCase(); // 返回一个 Promise 对象
})
.then((uppercasedData) => {
console.log(uppercasedData);
})
.catch((error) => {
console.error(error);
});