异步函数调用

问题产生代码:

1. let isExists=false

2. 

3. getProByXmbh(this.xmbh).then(res => {

4. if(res.data!==null)

5. {isExists=true ;}

6. });

7. 

8. if(isExists===true) {}

此中第8行的判断一直为false的原因:getProByXmbh.then()是一个异步函数。在异步函数完成前,后续代码 (第7行以后)的已经执行了,所以无法根据后端返回的数据反映 isExists 的变化。

解决方式:

1. .await等待异步函数执行完成之后再执行后续,用.await需要方法前加async声明为异步函数。

const res=  await getPro(this.xmbh)
  if (res.data!==undefined) 

2.将需要用到后端返回值的逻辑都放入.then的方法体里面,此种方法可能存在局限性。


.then()可以理解为一个“定时器”,他就是一个大的回调函数体,里面都是各个回调函数,.then()函数里的所有函数都会在普通函数执行完,栈区空后,从队列一个一个压回栈执行

async和await :函数前加Async关键字,即为异步函数,Await用于等待一个Promise对象成果或失败后获取结果,而axios就是一个本质为promise的对象。

axios底层原理:在promise对象里面创建一个XmlHttpRequest对象(包裹),把url里的传到自己函数里的promis对象中的XMLHttpRequest,把请求结果通过promise对象传出去。

所以axios的.then .catch本质上同promise一样。 await函数就可以等待Promise对象兑现结果之后,获取到它的成功或失败的结果,获得axios库返回的结果,无需.then()和.catch()了


函数回调:

//没有回调函数时

function first(){ setTimeout(function(){ document.write('first'+<br>) },1000) }

function second(){ document.write('second'+<br>) }

//本来我这样把first放在前面是希望first先执行,再执行second,结果现在因为设置了setTimeOut,限制了first在1秒之后才执行 first(); second();//先执行了second()的内容,再执行first()的内容

//改良后

function first(c){

setTimeout(function(){

document.write('first'+<br>)

c()

}}

//改为从函数内部实现先后顺序,将second函数传给first函数,在first函数里调用second就可以实现先输出first再到second了 。


2024.6.20

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值