当前位置: 首页 > news >正文

Promise:异步编程的优雅解决方案

在现代 JavaScript 开发中,异步编程是一个不可或缺的部分。无论是处理网络请求、文件操作还是其他耗时的任务,异步编程都能帮助我们提高代码的效率和响应性。而 Promise,作为一种强大的异步编程工具,已经成为 JavaScript 中处理异步操作的标准方式。

什么是 Promise?

从语法上讲,Promise 是一个对象,从它可以获取异步操作的消息。从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。Promise 有三种状态:

  • Pending(等待态):初始状态,既不是成功,也不是失败。

  • Fulfilled(成功态):操作成功完成。

  • Rejected(失败态):操作失败。

状态一旦改变,就不会再变。创建 Promise 实例后,它会立即执行。

Promise 的基本用法

下面是一个简单的示例,展示如何使用 Promise 来处理异步操作。

<body><div>test</div><button onclick="test()">click me</button><script>// 创建一个 Promise 对象let promise = new Promise((res, rej) => {// 定义一个条件变量 // 这里给定了一个固定的值, 条件以实际 情况为准let condition = true;if (condition) {// 如果条件成立,调用 resolve 函数,并传递一个字符串作为数据res("条件成立走这条路");} else {// 如果条件不成立,调用 reject 函数,并传递一个字符串作为错误信息// 可以 修改 condition 值 为 falserej("条件不成立走这条");}});// 定义一个函数,当按钮被点击时调用function test() {// 调用 Promise 的 then 方法来处理成功的情况promise.then((res) => {// 打印 Promise 成功时传递的数据console.log(res);// 返回一个新的字符串,这个字符串将被传递给下一个 thenreturn "这个是第一个then 返回的数据";}).then((res) => {// 打印第一个 then 返回的数据,并在其后追加字符串 "11"console.log(res + "11");}).catch((err) => {// 如果 Promise 被 reject,或者在 then 的回调函数中抛出异常,catch 会捕获到错误console.log(err);});}</script>
</body>

代码解析

  1. 创建 Promise 对象

    let promise = new Promise((res, rej) => {let condition = true;if (condition) {res("条件成立走这条路");} else {rej("条件不成立走这条");}
    });
    • new Promise((res, rej) => { ... }):创建一个新的 Promise 对象。

    • let condition = true:定义一个条件变量,用于决定 Promise 的状态。

    • res("条件成立走这条路"):如果条件成立,调用 resolve 函数,并传递一个字符串作为数据。

    • rej("条件不成立走这条"):如果条件不成立,调用 reject 函数,并传递一个字符串作为错误信息。

  1. 处理 Promise

    function test() {promise.then((res) => {console.log(res);return "这个是第一个then 返回的数据";}).then((res) => {console.log(res + "11");}).catch((err) => {console.log(err);});
    }
    • promise.then((res) => { ... }):调用 Promisethen 方法来处理成功的情况。

    • console.log(res):打印 Promise 成功时传递的数据。

    • return "这个是第一个then 返回的数据":返回一个新的字符串,这个字符串将被传递给下一个 then

    • console.log(res + "11"):打印第一个 then 返回的数据,并在其后追加字符串 "11"。

    • catch((err) => { console.log(err) }):捕获任何在 Promise 链中发生的错误,并打印错误信息。

输出结果

假设 conditiontrue,点击按钮后,控制台的输出将是:

条件成立走这条路
这个是第一个then 返回的数据11

如果 conditionfalse,点击按钮后,控制台的输出将是:

条件不成立走这条

Promise 的优势

  1. 更好的错误处理

    • Promise 提供了统一的错误处理机制,通过 catch 方法可以捕获整个 Promise 链中的错误。

  2. 链式调用

    • Promise 支持链式调用,使得代码更加简洁和易读。

  3. 避免回调地狱

    • 传统的回调方式容易导致回调地狱(Callback Hell),而 Promise 可以有效避免这种情况,使代码更加清晰。

http://www.dtcms.com/a/361900.html

相关文章:

  • elemen ui Table表格中添加图片
  • qData 数据中台【开源版】发布 1.0.4 版本,全面升级数据清洗与资产管理能力
  • Spring Security(第六篇):结营篇 —— 完整源码与后续进阶路线 [特殊字符]
  • Day20 API
  • 什么是最大熵强化学习?
  • Go项目中关于优雅关闭的那些事
  • 动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)
  • 如何将mysql数据导入人大金仓数据库
  • 漏洞挖掘 渗透测试思路图总结
  • 期货交易策略自动化实现
  • 数组基础及原理
  • 秋招冲刺计划(Day12)
  • Qwen-Image-Edit完全指南:实战20B参数模型的文字与语义-外观双重编辑
  • 如何使用VMware创建一台Ubuntu机器
  • Linux内核内存管理系列博客教程学习规划
  • KVM虚拟机快速安装与配置指南
  • leetcode算法day24
  • 安科瑞能源管理系统支撑低碳园区节能降碳发展
  • 【前端:Html】--4.进阶:媒体
  • K8S 知识框架和命令操作
  • 刷题之链表oj题目
  • 学习JavaScript的第一个简单程序:Hello World
  • Vue3响应式陷阱:如何避免ref解构导致的响应式丢失
  • ansible知识点总结1
  • Rviz-Gazebo联动
  • C++ 类型系统浅析:值类别与引用类型
  • 工业飞拍技术:高速生产线的 “动态抓拍神器”,到底牛在哪?
  • Java面试宝典:Redis高并发高可用(主从复制、哨兵)
  • oracle默认事务隔离级别
  • ArcGIS 4.x 绘图