Promise 是 JavaScript 中处理异步操作的一种方式,它代表了一个异步操作的最终完成或失败,并且可以获取其结果值。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),一旦状态改变,就会触发相应的回调函数。以下是关于 Promise 的一些重要内容:
1. 创建 Promise:
- 使用
new Promise()构造函数创建 Promise 对象,构造函数接收一个执行器函数作为参数,该函数有两个参数:resolve和reject,分别用于将 Promise 状态改变为成功和失败。 - 执行器函数会立即执行,可以进行异步操作,当异步操作完成后调用
resolve或reject函数来改变 Promise 的状态。
2. Promise 状态:
- pending:初始状态,既不是成功也不是失败状态。
- fulfilled:操作成功完成。
- rejected:操作失败。
3. Promise 方法:
then():用于注册 Promise 成功状态的回调函数,接收两个参数:成功回调和失败回调。catch():用于注册 Promise 失败状态的回调函数,用于捕获异常。finally():无论 Promise 最终状态如何,都会执行的回调函数。
4. Promise 链式调用:
- 可以通过链式调用的方式来处理多个异步操作,每个
then()方法返回一个新的 Promise 对象,从而实现串行执行或并行执行。
5. Promise.all() 和 Promise.race():
Promise.all():接收一个 Promise 数组,当所有 Promise 对象都成功时才会成功,返回一个包含所有结果的数组;如果其中一个 Promise 失败,则整个 Promise 失败。Promise.race():接收一个 Promise 数组,当其中一个 Promise 状态发生改变时(无论成功或失败),返回的 Promise 状态就会改变为相应的状态。
示例:
// 创建 Promise 对象
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
let success = true;
if (success) {
resolve("Operation completed successfully!");
} else {
reject("Operation failed!");
}
}, 1000);
});
// 注册成功和失败回调函数
promise.then(
result => {
console.log("Success:", result);
},
error => {
console.log("Error:", error);
}
);
// 使用 Promise 链式调用处理多个异步操作
let asyncTask1 = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve("Async Task 1 completed!");
}, 2000);
});
};
let asyncTask2 = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve("Async Task 2 completed!");
}, 1000);
});
};
asyncTask1()
.then(result => {
console.log(result);
return asyncTask2();
})
.then(result => {
console.log(result);
})
.catch(error => {
console.error(error);
});
// 使用 Promise.all() 处理多个异步操作
Promise.all([asyncTask1(), asyncTask2()])
.then(results => {
console.log("All tasks completed:", results);
})
.catch(error => {
console.error(error);
});
// 使用 Promise.race() 处理多个异步操作
Promise.race([asyncTask1(), asyncTask2()])
.then(result => {
console.log("First task completed:", result);
})
.catch(error => {
console.error(error);
});