我想等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))
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
按照我的理解,asyn函数的外部调用asyn函数的时候,不会被其内部的await阻塞,也就是说created方法不会因为test内部的await而等待,created早就执行完了,test内部还在await没有返回,created应该用then去接收test的返回值undefined。你应该是想用await来阻塞javascript执行,其实这是行不通的,await其实不会阻塞任何(非asyn)方法执行,本质上await也不能阻塞asyn函数的执行。created不是asyn函数,不可能等待或者阻塞。
添加回答
举报
0/150
提交
取消