📜  ES6 中的 Promise 状态是什么?(1)

📅  最后修改于: 2023-12-03 15:14:53.831000             🧑  作者: Mango

ES6 中的 Promise 状态

在 ES6 中,Promise 是一种用于处理异步操作的对象。它代表了一个异步操作的最终完成或失败,并可以返回结果或错误信息。

Promise 有三种状态:

  1. Pending(进行中):初始状态,表示异步操作还未完成。
  2. Fulfilled(已成功):异步操作已经成功完成,并返回了结果。
  3. Rejected(已失败):异步操作发生错误,返回了错误信息。
使用 Promise

为了创建一个 Promise 对象,可以使用 Promise 构造函数,它接受一个执行器函数作为参数。执行器函数包含两个参数,一个是 resolve 函数用于将 Promise 的状态从 Pending 转为 Fulfilled,另一个是 reject 函数用于将 Promise 的状态从 Pending 转为 Rejected。

const promise = new Promise((resolve, reject) => {
  // 异步操作
  // 如果操作成功,调用 resolve(result)
  // 如果操作失败,调用 reject(error)
});

可以通过对 Promise 对象调用 .then() 方法来注册成功后的回调函数,并使用 .catch() 方法来注册失败后的回调函数。

promise
  .then(result => {
    // 处理成功的结果
  })
  .catch(error => {
    // 处理失败的错误信息
  });
Promise 状态转换

一旦 Promise 的状态转为 Fulfilled 或 Rejected,就会保持不变,不会再发生变化。

当 Promise 的状态已经是 Fulfilled 时,调用 .then() 方法会立即触发成功的回调函数。

当 Promise 的状态已经是 Rejected 时,调用 .catch() 方法会立即触发失败的回调函数。

若在 Promise 状态还是 Pending 时注册回调函数,这些回调函数将会在 Promise 状态变为 Fulfilled 或 Rejected 时被调用。

Promise 链式调用

Promise 提供了一种链式调用的方式,可以避免回调地狱。通过在 .then() 方法中返回一个新的 Promise 对象,可以在异步操作完成后继续进行下一个异步操作。

promise
  .then(result => {
    // 处理成功的结果
    return anotherAsyncOperation(result);
  })
  .then(anotherResult => {
    // 处理另一个异步操作的结果
  })
  .catch(error => {
    // 处理失败的错误信息
  });

在链式调用中,如果某个 .then() 方法返回了一个非 Promise 对象,后续的 .then() 方法将会立即被调用,并使用该值作为参数。

总结

ES6 中的 Promise 提供了一种优雅地处理异步操作的方式。通过了解 Promise 的三种状态,以及如何使用和链式调用 Promise,可以更好地处理异步任务,提高代码的可读性和可维护性。

更多关于 Promise 的内容,请参考 MDN Promise 文档