返回

剥开ES6 Promise的外衣——浅析如何构建并行请求

前端

深入剖析 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 是一种处理异步操作的强大工具。它可以帮助您轻松地处理多个异步操作,并使您的代码更加可读和可维护。