为了账号安全,请及时绑定邮箱和手机立即绑定

async和await在生命周期中为什么没起作用?

async和await在生命周期中为什么没起作用?

紫衣仙女 2019-04-27 22:14:43
我想等created结束再执行mounted所以用了async和await但是发现这样好像没有起作用这是为什么?created(){this.test()},mounted(){console.log(2)},methods:{test2(){returnnewPromise((resolve,reject)=>{setTimeout(()=>{console.log(1)resolve()},200)})},asynctest(){awaitthis.test2()}}
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

mounted本来就是在created结束之后执行的。
async函数不会中断JavaScript的执行,而是将await的函数放入任务队列中。
mounted中console.log(2)是同步的,会先被执行(具体需要了解任务队列和Vue生命周期)
如果你要确保console.log(2)要在之后执行,建议你在mounted或created中用this.test().then(()=>console.log(2))
                            
查看完整回答
反对 回复 2019-04-27
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

按照我的理解,asyn函数的外部调用asyn函数的时候,不会被其内部的await阻塞,也就是说created方法不会因为test内部的await而等待,created早就执行完了,test内部还在await没有返回,created应该用then去接收test的返回值undefined。
你应该是想用await来阻塞javascript执行,其实这是行不通的,await其实不会阻塞任何(非asyn)方法执行,本质上await也不能阻塞asyn函数的执行。created不是asyn函数,不可能等待或者阻塞。
                            
查看完整回答
反对 回复 2019-04-27
  • 2 回答
  • 0 关注
  • 301 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信