Promise

server/2024/11/14 22:42:51/

Promise

Promise 是异步编程的一种解决方案, 可以解决传统 Ajax 回调函数嵌套问题。

案例:模拟使用ajax连续发起两次请求

第一次请求monster.json获取到monster的id

{"id": 1,"name": "黑山老妖"
}

第二次请求需要根据第一次获取到的id来获取monster的详细信息

{"address": "阴曹地府-黑山","skill": "翻江倒海功","age": 800
}

传统的ajax方式:

javascript">//jquery 发出 ajax 的方式
$.ajax({url: "data/monster.json",success(resultData) {	//如果请求成功了,回调处理函数 successconsole.log("第 1 次 ajax 请求 monster 基本信息=", resultData);//发出第二次 ajax 请求$.ajax({url: `data/monster_detail_${resultData.id}.json`,success(resultData) {console.log("第 2 次 ajax 请求 monster 详细信息=", resultData);//$.ajax => callback hell}, error(err) { //出错的回调函数console.log("出现异常=", err);}})}, error(err) {console.log("出现异常=", err);}
})

使用promise:

javascript">	//1. 创建 Promise 对象//2. 构造函数传入一个箭头函数//3. (resolve, reject) 参数列表 resolve: 如果请求成功, 调用 resolve 函数//4. 如果请求失败, 调用 reject 函数//5. 箭头函数体, 仍然是通过 jquery 发出 ajaxlet p = new Promise((resolve, reject) => {//发出 ajax$.ajax({url: "data/monster.json", success(resultData) {	//成功后回调函数console.log("promise1 结果 =", resultData);resolve(resultData);}, error(err) {//console.log("promise1 请求异常=", err);reject(err);}})})//这里我们可以继续编写请求成功后的业务p.then((resultData) => {//这里我们可以继续发出请求//console.log("p.then 得到 resultData", resultData);return new Promise((resolve, reject) => {$.ajax({url: `data/monster_detail_${resultData.id}.json`, success(resultData) { //第 2 次 ajax 请求成功,回调函数console.log("promise2 结果 =", resultData);//继续进行下一次的请求resolve(resultData);}, error(err) { //第 2 次 ajax 请求失败,回调函数//console.log("promise2 请求异常=", err);reject(err);}})})}).then((resultData) => {//可以在这继续发起请求}).catch((err) => { //这里可以对多次 ajax 请求的异常进行处理console.log("promise 异步请求异常=", err);})

注意事项和使用细节:

  • 如果返回的是 Promise 对象,可以继续执行.then()
  • .then((data)=>{}) 的 data 数据是上一次正确执行后 resolve(data) 返回传入的
  • 通过多级.then() 可以对异步请求分层次请求,实现代码重排,代码逻辑更加清晰合理
  • 通过多级.then() 后面的 .catch((err) => {}) 可捕获发生异常,便于调试

http://www.ppmy.cn/server/11666.html

相关文章

需求开发的详细步骤

需求开发是软件开发生命周期中的关键阶段,它涉及从原始想法到明确、可实施的需求规格的全过程。以下为需求开发的详细步骤: 1. 需求识别与收集 用户调研 面对面访谈:与最终用户、业务专家进行深度交谈,了解他们的业务流程、痛点…

springboot整合mybatis-plus模版

1.创建springboot项目 Maven类型Lombok依赖Spring Web 依赖MySQL Driver依赖pom.xml&#xff1a;<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/…

FreeRTOS时间管理

FreeRTOS时间管理 主要要了解延时函数&#xff1a; 相对延时&#xff1a;指每次延时都是从执行函数vTaskDelay()开始&#xff0c;直到延时指定的时间结束。 绝对延时&#xff1a;指将整个任务的运行周期看成一个整体&#xff0c;适用于需要按照一定频率运行的任务。 函数 vTa…

基于SSM的计算机课程实验管理系统的设计与实现(内附设计LW + PPT+ 源码下载)

基于SSM的计算机课程实验管理系统的设计与实现 项目名称&#xff1a; 基于SSM的计算机课程实验管理系统的设计与实现 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; SSM (Spring Spring MVC MyBatis)数据库&#xff1a; MySQL前端技术&…

去雾笔记01-SRKTDN: Applying Super Resolution Method to Dehazing Task

文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Network Architecture Abstract 们提出了一种结合超分辨方法和知识转移方法的模型。我们的模型由一个教师网络、一个去雾网络和一个超分辨率网络组成。 1. Introduction ECNU KT团队提出了一个知识蒸馏[20]模…

第四届大数据工程与教育国际会议(BDEE 2024)即将召开!

第四届大数据工程与教育国际会议&#xff08;BDEE 2024&#xff09;将于2024年8月9-11日在泰国清迈举行。数据驱动教育变革&#xff0c;智慧点亮未来课堂&#xff01;BDEE 2024是专注于大数据工程与教育领域的重要学术会议&#xff0c;全球大数据与教育精英齐聚&#xff0c;在数…

盲人辅助设备赋能视障人士,实时导航与避障打造无障碍生活

随着科技日新月异的发展&#xff0c;我们见证了一个又一个创新产品如何深刻改变人们的生活。在关爱特殊群体、推动社会包容性发展的道路上&#xff0c;一款名为蝙蝠避障的盲人辅助设备脱颖而出&#xff0c;以其卓越的实时导航与精准避障功能&#xff0c;成功破除了视障人士出行…

15 php学习:表单验证

表单验证 表单验证在网页和应用程序开发中起着至关重要的作用&#xff0c;其主要目的是确保用户输入的数据符合预期的格式和规则&#xff0c;以提升用户体验、数据准确性和系统安全性。以下是表单验证的主要作用&#xff1a; 数据准确性&#xff1a;通过表单验证&#xff0c;可…