try catch async await promise.resolve $nextTick

$nextTick:可以在created或mounted中改变数据,但是会把数据都先收集起来,到时候一起更改dom,所以当有的操作要基于其他数据把dom改完后,比如要先把按钮放出才能进行获得焦点,把获得焦点的代码写在$nextTick()里面。但是不能写成

this.$nextTick(() => {
this.$refs.myInp.focus()
})
this.isShow = true;//控制按钮的显隐。

只能写成这样。因为,如果像上面那样写法的话,执行到nextTick时,会把他加入微任务,再执行到this.isShow = true时,会再把执行dom更新的微任务也加进去,所以再执行微任务时,会先执行nextTick的微任务,然后再执行dom更新的微任务,那时根本就没有dom节点,没有input框呢,并且,如果在nextTick的下面在写上其他的更改data里数据的的代码,那将会也可以获取到焦点,因为更新dom节点的微任务将会在nextTick后进行执行了!!在群里问的一个大佬,感觉那位大佬真的是太牛了,困扰我很久的知识终于解开了!还有一点报错了的时候是不会继续执行下面的代码的。

this.isShow = true;
this.$nextTick(() => {
this.$refs.myInp.focus()
})

且要基于dom改变再放在nextTick里,比如点击事件,或者有子组件的可以放在nextTick里面,因为mounted无法确保子组件被渲染。或者要基于新改的数据进行判断,那么就也要用nextTick了。

try catch finally:

只能对同步的代码进行捕获异常,可以对发起的请求进行捕获,但是axios发起的请求是promise的,是不能被捕获的。throw 一个错误会出现。

如果用try catch后打印后那么就是这样,并且下面的代码会继续进行下去。

 

 promise.reslove里的then,会导致多个then里的异步任务变成了同步任务,所以会等待每一个任务执行完成,但是当一个任务是定时器setTimeout的话,那么那就会又变成了一个宏任务,也就是一个异步任务了,所以就不会等他执行完了。真的是,脑子没有转过来,还是问的大佬。

dom渲染是有事件循环的,不是等到所有的数据都更新完了再进行渲染,而是在一个事件循环里进行一次dom渲染,所以当created中有promise时,会先执行一次宏任务,也就是先把同步代码执行一次,所以在这里可以进行对加载状态的为true,然后等待promise中的数据和其它宏任务的数据加载完,然后再次执行一次事件循环,在这里可以写上对加载状态的false,这样数据加载完后就可以加载状态就消失了。而如果使用try catch进行加载状态的的修改的话,那么就无法等待了,那些数据会一起进行dom渲染了,所以不可以使用。

async await:async 函数调用不会造成阻塞,它内部所有的阻塞都被封装在一个 Promise 对象中异步执行。所以当await报错所以阻塞时,那么就会封装在一个promise中,把async那个函数.then()时就可以得到报错的内容,而当不报错时,.then()只会得到一个undefined。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值