JavaScript中Promise分别有哪些函数?

在 JavaScript 中,Promise 是一种用于处理异步操作的对象。它代表一个尚未完成的操作,并最终会返回一个值或者抛出错误。Promise 可以处于以下三种状态之一:

  • Pending(等待中) :初始状态,表示操作尚未完成。
  • Fulfilled(已完成) :表示操作成功完成,并且有返回结果。
  • Rejected(已拒绝) :表示操作失败,并且有错误信息。

1. 创建一个 Promise

你可以使用 new Promise() 来创建一个新的 Promise 对象。构造函数接受一个函数作为参数,这个函数又接受两个参数:resolvereject。这两个参数是函数,用于标记操作的成功或失败。

javascript 复制代码
javascript
复制代码
const promise = new Promise((resolve, reject) => {
  // 异步操作
  let success = true;

  if (success) {
    resolve("成功!"); // 操作成功
  } else {
    reject("失败!"); // 操作失败
  }
});

2. Promise 的方法

Promise 提供了以下几种常用的方法来处理结果:

then()

then() 方法接受两个回调函数,第一个回调函数用于处理成功的结果,第二个回调函数用于处理失败的情况。

javascript 复制代码
javascript
复制代码
promise.then(
  result => console.log(result), // 处理成功
  error => console.log(error)    // 处理失败
);

catch()

catch() 方法是 then() 的快捷方式,用来处理 Promise 被拒绝(rejected)时的情况。它只接收一个参数,即错误处理函数。

javascript 复制代码
javascript
复制代码
promise
  .then(result => console.log(result))
  .catch(error => console.log(error)); // 处理错误

finally()

finally() 方法无论 Promise 的最终状态如何都会执行,用于进行清理操作,如关闭文件或清理资源。

javascript 复制代码
javascript
复制代码
promise
  .then(result => console.log(result))
  .catch(error => console.log(error))
  .finally(() => console.log("操作结束"));

3. 示例:异步操作

javascript 复制代码
javascript
复制代码
// 模拟一个异步操作,例如请求数据
const fetchData = new Promise((resolve, reject) => {
  setTimeout(() => {
    const data = { message: "数据请求成功" };
    resolve(data); // 模拟操作成功
  }, 2000);
});

fetchData
  .then(data => {
    console.log(data.message); // 数据请求成功
  })
  .catch(error => {
    console.error("发生错误:", error);
  })
  .finally(() => {
    console.log("操作结束");
  });

4. Promise.all()

Promise.all() 用于并行执行多个 Promise,并且返回一个新的 Promise,当所有 Promise 都完成时(无论成功还是失败),Promise.all() 才会触发。

javascript 复制代码
javascript
复制代码
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 1000, "第一个 Promise"));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 2000, "第二个 Promise"));
const promise3 = new Promise((resolve, reject) => setTimeout(resolve, 3000, "第三个 Promise"));

Promise.all([promise1, promise2, promise3])
  .then(results => {
    console.log(results); // ["第一个 Promise", "第二个 Promise", "第三个 Promise"]
  })
  .catch(error => {
    console.error("错误:", error);
  });

5. Promise.race()

Promise.race() 会返回第一个完成的 Promise(无论是成功还是失败)。如果有一个 Promise 被拒绝,它就会立即返回。

javascript 复制代码
javascript
复制代码
const promise1 = new Promise((resolve, reject) => setTimeout(resolve, 1000, "第一个 Promise"));
const promise2 = new Promise((resolve, reject) => setTimeout(resolve, 500, "第二个 Promise"));

Promise.race([promise1, promise2])
  .then(result => console.log(result)) // "第二个 Promise"
  .catch(error => console.error("错误:", error));

总结

Promise 是现代 JavaScript 处理中处理异步操作的标准方式,比传统的回调函数(callback)更容易理解和维护,尤其在涉及多个异步操作时。

相关推荐
长风清留扬4 分钟前
小程序毕业设计-音乐播放器+源码(可播放)下载即用
javascript·小程序·毕业设计·课程设计·毕设·音乐播放器
web1478621072318 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
m0_7482478019 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖22 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
青灯文案129 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
ThisIsClark33 分钟前
【后端面试总结】MySQL主从复制逻辑的技术介绍
mysql·面试·职场和发展
m0_7482548834 分钟前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl
ZJ_.1 小时前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营1 小时前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架