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

promis(resolve,reject)入门级别

JavaScript Promise 的定义

Promise 是一种用于处理异步操作的对象,表示一个可能已经完成或者尚未完成的操作的结果。它的核心作用在于简化复杂的回调嵌套问题(即所谓的“回调地狱”),使异步代码更加清晰易读。

Promise 的状态

Promise 对象具有三种主要状态:

  1. Pending(等待态): 初始状态,在此状态下,异步操作还未完成。
  2. Fulfilled(已成功态): 异步操作已完成,并返回了一个结果。
  3. Rejected(已失败态): 异步操作失败,并抛出了错误信息。

这些状态的变化是单向的,意味着一旦进入 Fulfilled 或 Rejected 状态,则无法再改变其状态。


使用 Promise 的原因

传统的 JavaScript 异步编程通常依赖于回调函数来处理结果。然而,当多个异步调用相互依赖时,容易形成深层嵌套的回调结构,这不仅降低了代码的可读性,还增加了调试难度。Promise 提供了一种更优雅的方式来管理这种复杂性:

  1. 链式调用:通过 .then() 方法可以轻松实现方法链,从而避免深层次的回调嵌套。
  2. 错误处理统一化:可以通过 .catch() 统一捕获整个链条中的任何异常,而不需要在每个回调中单独处理错误。
  3. 更好的控制流:Promise 支持 async/await 语法糖,进一步提升了异步代码的表现力和简洁度。

以下是基于 Promise 实现的一个简单例子,展示如何利用它来处理异步逻辑:

const fetchData = () => {return new Promise((resolve, reject) => {setTimeout(() => {const data = "模拟的数据";if (data) {resolve(data);} else {reject("获取数据失败");}}, 1000);});
};fetchData().then(result => console.log(`成功接收到数据: ${result}`)).catch(error => console.error(`发生错误: ${error}`));

在这个示例中,fetchData 函数返回的是一个 Promise 对象。如果一切正常,会触发 resolve 并传递成功的数据;如果有误,则触发 reject 来报告错误消息。


总结

Promise 不仅提供了一种标准化的方式去表达异步行为,而且极大地改善了开发者编写和维护异步代码的能力。无论是简单的延迟加载还是复杂的 API 调用场景,都可以借助 Promise 更加高效地解决问题。

在这里插入图片描述

在 JavaScript 中,new Promise 是创建一个新的 Promise 对象的方式。其基本语法结构如下:

const myPromise = new Promise((resolve, reject) => {// 执行异步操作或其他逻辑if (/* 条件满足 */) {resolve(value); // 将 Promise 状态改为 fulfilled 并传递成功值} else {reject(error); // 将 Promise 状态改为 rejected 并传递错误原因}
});
resolvereject 的作用
  • resolve 函数
    当异步操作成功完成时,调用 resolve 可以将 Promise 的状态从 pending 改为 fulfilled,并可以向后续的 .then() 方法传递成功的数据。

  • reject 函数
    如果异步操作失败,则可以通过调用 rejectPromise 的状态从 pending 改为 rejected,并可向后续的 .catch() 或者 .then(null, rejectionHandler) 方法传递错误信息。

使用场景分析
场景一:处理 HTTP 请求

当发起网络请求时,通常会使用 Promise 处理响应的成功或失败情况。例如通过 fetch API 获取远程资源:

function fetchData(url) {return new Promise((resolve, reject) => {fetch(url).then(response => {if (!response.ok) { // 判断响应是否正常reject(new Error(`HTTP error! status: ${response.status}`));} else {resolve(response.json()); // 解析 JSON 数据并返回给 then()}}).catch(err => reject(err)); // 捕获 fetch 错误并拒绝 Promise});
}// 调用示例
fetchData('https://api.example.com/data').then(data => console.log('Success:', data)).catch(error => console.error('Error:', error.message));

在这个例子中,如果服务器返回的状态码不正常(如 404),则调用 reject 抛出异常;反之,解析成功后调用 resolve 返回数据。

场景二:模拟延迟加载

有时需要模拟某些耗时的操作,比如等待几秒钟后再继续执行下一步动作:

function delay(ms) {return new Promise((resolve, reject) => {setTimeout(() => {const success = Math.random() > 0.5;if (success) {resolve('Operation completed successfully');} else {reject('An unexpected error occurred');}}, ms);});
}delay(2000).then(message => console.log(message)).catch(error => console.error(error));

这里随机决定是否触发 resolvereject,从而测试不同的回调路径。


总结

新建 Promise 主要用于封装具有不确定性结果的任务流程控制机制。其中核心在于利用 executor 函数内的两个参数——resolvereject 完成对最终状态设定工作。前者代表任务顺利完成后的行为模式定义,后者则是针对可能出现的各种问题提供反馈渠道。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/202307240241在这里插入图片描述

http://www.xdnf.cn/news/176329.html

相关文章:

  • 互联网大厂Java面试:从Spring Boot到微服务架构的实践与挑战
  • 智诚科技苏州SOLIDWORKS授权代理商的卓越之选
  • vite.config.ts 的详细配置项说明、完整代码示例及表格总结
  • 代码随想录算法训练营day12(二叉树)
  • javaScript--数据结构和算法
  • 轮转数组(中等)
  • 如何优雅地解决AI生成内容粘贴到Word排版混乱的问题?
  • 从“世界工厂”到“智造之都”:双运放如何改写东莞产业基因?
  • JavaScript 中 undefined 和 not defined 的区别
  • Dev控件RadioGroup 如何设置一排有N个显示或分为几行
  • 使用cesium设置第一视角
  • 第2讲、Tensor高级操作与自动求导详解
  • w~嵌入式C语言~合集6
  • 【计算机哲学故事1-2】输入输出(I/O):你吸收什么,便成为什么
  • APP、游戏、网站被黑客攻击了怎么解决?
  • MongoDB 操作全解析:从部署到安全控制的详细指南(含 emoji 趣味总结)
  • 京东商品详情数据爬取难度分析与解决方案
  • Spark-Streaming核心编程(3)
  • windows开启内测压缩(亲测可用)
  • uniapp-商城-40-shop 购物车 选好了 进行订单确认4 配送方式3 地址编辑
  • C++和Java该如何选择?
  • DeepSeek智能时空数据分析(四):绘制行政区域并定制样式
  • Go 语言 核心知识点
  • 【数据挖掘】时间序列预测-时间序列的平稳性
  • 【数据挖掘】时间序列预测-常用序列预测模型
  • 深入理解Android Activity生命周期
  • 在windows使用docker打包springboot项目镜像并上传到阿里云
  • java面向对象编程【高级篇】之多态
  • 再谈从视频中学习:从给视频打字幕的Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制
  • 虚拟数字人:从虚拟到现实的跨越与未来展望