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); });