Promise 是 JavaScript 中处理异步操作的对象,它代表一个异步操作的最终完成或失败,并返回结果。Promise 有三个状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。一旦 Promise 进入 fulfilled 或 rejected 状态,它就是 settled(已定型)的,此后不再改变。

创建一个 Promise:
const myPromise = new Promise((resolve, reject) => {
  // 异步操作,如读取文件、网络请求等

  // 异步操作成功时,调用 resolve,并传递结果
  // resolve("Operation succeeded");

  // 异步操作失败时,调用 reject,并传递错误信息
  // reject(new Error("Operation failed"));
});

处理 Promise 结果:
myPromise
  .then((result) => {
    console.log("Success:", result);
  })
  .catch((error) => {
    console.error("Error:", error);
  })
  .finally(() => {
    console.log("Finally, do something regardless of success or failure.");
  });

  •  .then() 方法用于处理 Promise 成功状态,接收一个回调函数。

  •  .catch() 方法用于处理 Promise 失败状态,接收一个回调函数。

  •  .finally() 方法用于在 Promise settled 后执行一些操作,不论成功还是失败。


Promise 链:
function fetchData() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve("Data fetched");
    }, 2000);
  });
}

fetchData()
  .then((data) => {
    console.log(data);
    return "Processed data";
  })
  .then((processedData) => {
    console.log(processedData);
  })
  .catch((error) => {
    console.error("Error:", error);
  });

在 Promise 中,可以返回一个新的 Promise,从而创建 Promise 链,依次处理异步操作。

Promise.all() 和 Promise.race():

  •  Promise.all() 接收一个包含多个 Promise 的数组,返回一个新的 Promise,只有当所有 Promise 都成功时,它才成功;如果任何一个 Promise 失败,它就失败。

  const promise1 = Promise.resolve("Promise 1 resolved");
  const promise2 = Promise.resolve("Promise 2 resolved");

  Promise.all([promise1, promise2])
    .then((results) => {
      console.log("All promises resolved:", results);
    })
    .catch((error) => {
      console.error("At least one promise rejected:", error);
    });

  •  Promise.race() 接收一个包含多个 Promise 的数组,返回一个新的 Promise,只有当其中任何一个 Promise 完成时,它就完成(无论是成功还是失败)。

  const promise1 = new Promise((resolve) => setTimeout(() => resolve("Promise 1 resolved"), 1000));
  const promise2 = new Promise((resolve) => setTimeout(() => resolve("Promise 2 resolved"), 2000));

  Promise.race([promise1, promise2])
    .then((result) => {
      console.log("First promise resolved:", result);
    })
    .catch((error) => {
      console.error("First promise rejected:", error);
    });

Promise 是现代 JavaScript 中广泛使用的异步编程工具,它提供了更优雅的处理异步操作的方式,避免了回调地狱(Callback Hell)的问题。


转载请注明出处:http://www.pingtaimeng.com/article/detail/12810/JavaScript