ES6 Promise 是 ECMAScript 2015(简称 ES6)引入的一种处理异步操作的编程模式。Promise 可以简化异步编程,并使代码更易于维护。一个 Promise 对象代表一个尚未完成但预计将来会完成的操作,并能够追踪这个操作的状态。
Promise 有三种状态:
- 等待中(pending):初始状态,既不是成功也不是失败。
- 已成功(fulfilled):表示操作成功完成。
- 已失败(rejected):表示操作失败或发生错误。
Promise 的原型上提供了 then
和 catch
方法来分别处理已成功和已失败状态的回调函数。
下面是一个 Promise 的基本用法示例:
// 创建一个 Promise
const promise = new Promise((resolve, reject) => {
// 执行异步操作(例如:发起 Ajax 请求、读取文件等)
setTimeout(() => {
// 成功时执行 resolve 回调
resolve('操作成功');
// 发生错误时执行 reject 回调
// reject('操作失败');
}, 1000);
});
// 使用 then 方法处理成功状态
promise.then((result) => {
console.log(result); // 输出 "操作成功"
});
// 使用 catch 方法处理失败状态
promise.catch((error) => {
console.error(error); // 输出 "操作失败"
});
Promise 还提供了一些用于处理多个 Promise 的静态方法,如 Promise.all
和 Promise.race
。
-
Promise.all
:接收一个包含多个 Promise 的数组,当所有的 Promise 都成功(fulfilled)时返回一个新的 Promise,其 resolve 回调接收到的是每个成功的 Promise 的 resolve 回调参数组成的数组;如果有一个或多个 Promise 失败(rejected),则新的 Promise 进入失败状态,且将第一个失败的 Promise 的 reject 回调参数传递给新 Promise 的 reject 回调。 -
Promise.race
:接收一个包含多个 Promise 的数组,返回一个新的 Promise,这个新的 Promise 会在第一个输入的 Promise 完成(无论是成功还是失败)时进入相应的状态,且其 resolve 或 reject 回调参数与该第一个完成的 Promise 的回调参数一致。
开源项目地址: