【Promise】async + await + axios发送Ajax请求(五)

-async函数

  1. 函数的返回值为 promise 对象
  2. promise 对象的结果由 async 函数执行的返回值决定

Ⅱ-await表达式

  1. await 右侧的表达式一般为 promise 对象, 但也可以是其它的值

  2. 如果表达式是 promise 对象, await 返回的是 promise 成功的值

  3. 如果表达式是其它值, 直接将此值作为 await 的返回值

Ⅲ-注意

  1. await 必须写在 async 函数中, 但 async 函数中可以没有 await
  2. 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理

IV-如何在Promise外部使用Promise的结果

用到的本章节知识:

1、axios本质上就是一个promise,所以下面用定时器+Promise模拟axios,效果一样,可以将new Promise(resolve => {setTimeout(function() { resolve("promise普通结果"); }, 1000); })等价于axios({})

2、resolve() 与reject()是修改Promise状态并往外抛出的,一个Promise只能改变一次状态,所以一个primise中只能调用一次

3、 上一步抛出后可以在下面 的.then()中获取到

Ⅰ-如果没有用.then(),则值会抛往Promise外部

Ⅱ-如果声明了.then(),则值会被.then()接住,放到里面处理,如果需要再次抛出--某些业务场景需要 ,然后在下一个then()或者外部使用, 则可以 .then(v=>return v) ---前提这个链式调用前曾使用过resolve() 与reject()才用return,不然就用这两个resolve() 与reject()

javascript 复制代码
//讲解时写的简单demo
let resolveCommon = ()=> {
 let result="普通promise初始值"
  result=new Promise(resolve => {setTimeout(function() { resolve("promise普通结果"); }, 1000); })
 console.log(result)
 //打印结果: Promise { <pending> } 
};
let resolveAsync=async ()=> {
 let result="await+async的promise初始值"
  result=await new Promise(resolve => { setTimeout(function() { resolve("这是async+await结果"); }, 1000);})
 console.log(result)
 //打印结果: 这是async+await结果  这里就是正确的值,你可以在下一步进行正常使用,也可以用在下一步的promise中
 //------------------------------------------------------
 //在第二个promise中调用使用
 let result2=""
 result2= await new Promise(resolve => { setTimeout(function() { resolve(result+"+经过第二个promise加工"); }, 1000);})
 .then(v=>{
   console.log("第二个promise的then()中打印并返回:",v)
   return v+",经过then()加工返回"
 })
 console.log("最终结果:第二个promise外部结果打印,",result2)
 //---------------------------------------------
};
resolveCommon()  //调用普通promise函数
resolveAsync()    //调用await+async
/**
运行结果
1.resolveCommon() 运行结果:    Promise { <pending> }
2.resolveAsync() 运行结果:     
 这是async+await结果
 第二个promise的then()中打印并返回: 这是async+await结果+经过第二个promise加工
 最终结果:第二个promise外部结果打印, 这是async+await结果+经过第二个promise加工,经过then()加工返回
*/

V-async与await结合发送Ajax请求

javascript 复制代码
//获取元素
				const btn=document.getElementsByTagName('button')
				const result=document.getElementById('result')
				
				
				btn[0].onclick=async function(){
					//get请求
					 const data=await axios.get('http://127.0.0.1:8000/server',{
						//参数
						params:{
							id:100
						},
					})
					
					console.log(data);
				}
相关推荐
军军君0129 分钟前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi9221 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
打小就很皮...2 小时前
Tesseract.js OCR 中文识别
前端·react.js·ocr
qq_177767372 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462102 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
wuhen_n2 小时前
JavaScript内存管理与执行上下文
前端·javascript
Hi_kenyon2 小时前
理解vue中的ref
前端·javascript·vue.js
jin1233223 小时前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_920931704 小时前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
落霞的思绪4 小时前
配置React和React-dom为CDN引入
前端·react.js·前端框架