返回
剥开ES6 Promise的外衣——浅析如何构建并行请求
前端
2023-10-21 20:20:42
深入剖析 ES6 Promise 的运作机制
ES6 Promise 是一种处理异步操作的工具。它提供了一种简单而有效的方式来处理异步操作,并且可以很好地处理多个异步操作。Promise 对象代表着一个异步操作的最终完成或失败的结果。
Promise 构造函数采用一个函数作为参数,该函数称为 executor。executor 函数有两个参数,分别是 resolve 和 reject。resolve 用于表示异步操作已成功完成,而 reject 用于表示异步操作已失败。
当一个 Promise 实例被创建时,它会立即处于等待(pending)状态。当 executor 函数执行时,它可能会调用 resolve 或 reject 函数来改变 Promise 的状态。一旦 Promise 的状态改变,它就会被解析(resolved)或拒绝(rejected)。
Promise 的状态一旦被解析或拒绝,就不能再改变。这意味着 Promise 对象只能被解析或拒绝一次。
Promise 实例的各种状态
Promise 实例可以处于三种状态之一:
- 等待(pending):Promise 正在等待 executor 函数执行完成。
- 解析(resolved):Promise 已成功完成。
- 拒绝(rejected):Promise 已失败。
构建并行请求的示例
以下是一个使用 ES6 Promise 构建并行请求的示例:
function fetchUserData(userId) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (userId === 1) {
resolve({ name: 'John Doe' });
} else {
reject({ error: 'User not found' });
}
}, 1000);
});
}
Promise.all([
fetchUserData(1),
fetchUserData(2),
fetchUserData(3),
]).then((values) => {
console.log(values);
}).catch((errors) => {
console.log(errors);
});
在这个示例中,fetchUserData 函数使用 Promise 来表示获取用户数据这一异步操作。然后,Promise.all 函数用于等待所有三个 fetchUserData 函数都完成。一旦所有请求都完成,Promise.all 函数就会返回一个数组,其中包含每个请求的结果。
结语
ES6 Promise 是一种处理异步操作的强大工具。它可以帮助您轻松地处理多个异步操作,并使您的代码更加可读和可维护。