猿问

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

我想等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()
}
}
紫衣仙女
浏览 302回答 2
2回答

一只斗牛犬

mounted本来就是在created结束之后执行的。async函数不会中断JavaScript的执行,而是将await的函数放入任务队列中。mounted中console.log(2)是同步的,会先被执行(具体需要了解任务队列和Vue生命周期)如果你要确保console.log(2)要在之后执行,建议你在mounted或created中用this.test().then(()=>console.log(2))

翻翻过去那场雪

按照我的理解,asyn函数的外部调用asyn函数的时候,不会被其内部的await阻塞,也就是说created方法不会因为test内部的await而等待,created早就执行完了,test内部还在await没有返回,created应该用then去接收test的返回值undefined。你应该是想用await来阻塞javascript执行,其实这是行不通的,await其实不会阻塞任何(非asyn)方法执行,本质上await也不能阻塞asyn函数的执行。created不是asyn函数,不可能等待或者阻塞。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答