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

promise解决回调地狱的方法之一

回调地狱。就是多个函数循环箱套 。没有了可读性和可维护性,代码么有问题,只是不好后期维护


promise 承诺es6
就是解决回调地狱的方法之一 能把回到地狱写的优雅一点。让代码拥有可读性和可维护性
promise 有三个状态,一旦状态确定就不可更改。1-2;1-3
1 承诺继续 pending 异步事情正在执行-状态
2 承诺成功 fulfilled 异步执行执行成功-结果 data
3 承诺失败 rejected 异步事情执行失败-结果 error
promise 语法:
let p1=new Promise ( function(){我们要准备做的事情} )

	解决回调地狱的方法:
	**1 promise 有三个状态.两种结果。**
		状态确定后不可更改,
			**状态:继续-成功、继续-失败**
			
			**结果:**
				承诺继续 -padding
				**1 成功-fulfilled
				2 失败-rejected**
	语法:(function函数内部接收两个参数
	resolve是成功的回调--then ,reject是失败的回调--catch,
	两个方法:一个叫then函数 一个叫catch函数)
	实例化对象里面是异步的事情
	
		let p=new Promise(function(resolve,reject){
			 //这里面执行异步操作
			resolve()//成功执行then
			reject()//失败执行catch
		})
		p.then(function(){})
		p.catch(function(){})

运行如下:简单语法的运行,

	<script type="text/javascript">
		// Promise 解决回调地狱的方法
		let p=new Promise(function(resolve,reject){
			//执行异步操作
			if(true){//成功的执行
				resolve(value)//实参
			}else{//失败执行
				reject(error)//实参
			}
		})
		// 使用
		//对应的成功的函数 resolve--then 函数
		p.then(function(res){
			console.log('成功打印')
		})
		// 对应失败的函数 reject --catch 函数
		p.catch(function(res){
			console.log('失败打印')
		})
		
	</script>

还可以直接执行异步的ajax请求

<script type="text/javascript">
		// Promise 解决回调地狱的方法
		let p = new Promise(function(resolve, reject) {
			//执行异步操作
			// 发送一个ajax请求
			let xhr = new XMLHttpRequest();
			xhr.open('get', url)
			xhr.onreadystatechange = function() { //状态码改变的时候会执行的判断语句
				// 当http响应状态码请求失败的时候
				if (xhr.status === 404) {
					reject("地址不存在") //实参
				}
				// http请求成功时候,并且浏览器也解析响应体完毕
				// 就可以正常调用下变的函数
				if (xhr.status===2000&&xhr.readyState===4) { //成功的执行
					resolve(xhr.responseText) //实参
				}
			}
			xhr.send()
		})
		// 使用
		//对应的成功的函数 resolve--then 函数
		p.then(function(res) {
			console.log('成功打印'+res)
		})
		// 对应失败的函数 reject --catch 函数
		p.catch(function() {
			console.log('失败打印')
		})
	</script>

相关文章:

  • HTML5的兼容性测试
  • 为了Cisco UC,36年来家中第一次安装固话
  • 链式调用和解决回调地狱的终极解决方法async,await
  • jquery的使用
  • 探究JVM——垃圾回收
  • jQuery的节点操作
  • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
  • jQuery获取元素尺寸
  • ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
  • 浅谈利用SQLite存储离散瓦片的思路和实现方法
  • Vue及双向绑定
  • 跟我一起ggplot2(1)
  • 解析v-model指令,对于刚接触的比较好理解
  • App架构设计经验谈:服务端接口的设计
  • Vue v-for的操作
  • “大数据应用场景”之隔壁老王(连载四)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • canvas 五子棋游戏
  • Git同步原始仓库到Fork仓库中
  • HashMap剖析之内部结构
  • HTML5新特性总结
  • JavaScript标准库系列——Math对象和Date对象(二)
  • javascript数组去重/查找/插入/删除
  • java中的hashCode
  • k个最大的数及变种小结
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • 将回调地狱按在地上摩擦的Promise
  • 今年的LC3大会没了?
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊flink的TableFactory
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • - 转 Ext2.0 form使用实例
  • NLPIR智能语义技术让大数据挖掘更简单
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云服务器购买完整流程
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #NOIP 2014# day.1 T2 联合权值
  • #NOIP 2014#Day.2 T3 解方程
  • (2)(2.10) LTM telemetry
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • .gitignore文件_Git:.gitignore
  • .NET BackgroundWorker
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET中统一的存储过程调用方法(收藏)
  • /boot 内存空间不够