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

链式调用和解决回调地狱的终极解决方法async,await

promise链式调用

		**then 是成功回调,只要在then后边return一个promise
		就可以继续then**
		
<script type="text/javascript">
	let p1=new Promise(function(resolve,reject){
		setTimeout(function(){
			resolve()//成功回调
			// reject()//失败回调
		},2000)//2秒后执行后边的then、catch函数
	})
	p1.then(function(res){
		console.log("成功执行then"+res)
		// 在准备第二个promise对象
		let p2=new Promise(function(resolve,reject){
			setTimeout(function(){
				resolve()
			},1000)
		})
		return p2
	}).then(function(){
		console.log("我是p1 then后边的第二个then")
	})

	p.catch(function(){
		console.log("失败执行catch")
	})
	
</script>

解决回调地狱的终极方法 async/await ES7的语法,可以通过 async/await让代码看起来像同步的

async异步 await等待
await 等待 就是当后面跟的是promise对象,就让他停止 ,先让里面的异步事情做完,在把结果返回给前面的新变量,在继续向后执行
他只生效当前作用域内部,也就是async函数内部。
pGetSend 是一个异步的ajax请求
await会等待这个异步函数请求结束,并把结果给前面的res变量以后,在向后执行代码。

async/await 语法
async/await 是es7的新增语法,是为promise设计的语法。
是回调地狱的终极解决方案,就是用async/await语法把–异步代码写的看起来像同步的代码。

  语法规范:
    1 async关键字写在--函数的前面,就把该函数变成了一个异步函数
    2 await是一个写在 异步函数里面的关键字
    3 await关键字后面的必须是一个promise对象
  满足以上三个条件,就可以把本该在promise的then回调里面接受的结果 ,放在await关键字前面定义一个变量来接受了。 

语法层面的兼容需要用bable

	**语法: 
	async 必须写在函数前边
	await 关键字 后边必须跟着Promise对象
	async function fn(){}**
	
	**<!-- 语法兼容可以借助babel 直接百度即可 -->**
	<script type="text/javascript">
		function pGetSend(url){
			let p=new Promise(function(resolve,reject){
				let xhr=new XMLHttpRequest()
			xhr.open('get',url)
			xhr.onload=function(){
				resolve(xhr.responseText)
			}
			xhr.send()
			})
			return p
		}
		
		async function fn(){
			// 1请求1 
			let res =await pGetSend("url.php")
			let result=JSON.parse(res)
			console.log("1"+res)
			// 2 次
			let res2=await pGetSend("url.php?key=value&key1=vlaue1")
			let result2=JSON.parse(res2)
			console.log("2"+res2)
		}
		fn ()
		
	</script>

相关文章:

  • jquery的使用
  • 探究JVM——垃圾回收
  • jQuery的节点操作
  • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
  • jQuery获取元素尺寸
  • ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
  • 浅谈利用SQLite存储离散瓦片的思路和实现方法
  • Vue及双向绑定
  • 跟我一起ggplot2(1)
  • 解析v-model指令,对于刚接触的比较好理解
  • App架构设计经验谈:服务端接口的设计
  • Vue v-for的操作
  • 如何查找UDID
  • v-if 和v-show的相同和区别
  • 字典树(Trie tree)
  • 【EOS】Cleos基础
  • CAP 一致性协议及应用解析
  • css系列之关于字体的事
  • Docker: 容器互访的三种方式
  • git 常用命令
  • Hibernate【inverse和cascade属性】知识要点
  • Java程序员幽默爆笑锦集
  • Linux gpio口使用方法
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Spark RDD学习: aggregate函数
  • SSH 免密登录
  • tensorflow学习笔记3——MNIST应用篇
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 解析 Webpack中import、require、按需加载的执行过程
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 试着探索高并发下的系统架构面貌
  • 微信小程序--------语音识别(前端自己也能玩)
  • 协程
  • 以太坊客户端Geth命令参数详解
  • 用Python写一份独特的元宵节祝福
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #pragma once
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (二)正点原子I.MX6ULL u-boot移植
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十八)SpringBoot之发送QQ邮件
  • .gitignore文件—git忽略文件
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET业务框架的构建
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • [20150904]exp slow.txt
  • [AIGC] MySQL存储引擎详解
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BZOJ3757] 苹果树
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C#]扩展方法