vue 鉤子函式 使用async await
阿新 • • 發佈:2018-12-03
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue 鉤子函式 使用async await</title>
</head>
<body>
<div id="app">
<div v-for="item in list">
{{ item }}
< /div>
</div>
<script src="https://cdn.bootcss.com/vue/2.5.17/vue.min.js"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
list: [1, 2, 3]
},
async created(){
// 最先輸出3
console.log(3)
await setTimeout(()=>{
// 1輸出的時間依賴於 定時間隔
console.log(1)
},100)
// 5的輸出順序也不是在1後面
console.log(5)
} ,
async mounted(){
// 其次輸出4
console.log(4)
await setTimeout(()=>{
// 2輸出的時間依賴於 定時間隔
console.log(2)
},100)
// 6的輸出順序也不是在2後面
console.log(6)
}
})
</script>
</body>
</html>
通過設定created和mounted中定時時間不同,檢視控制檯輸出順序。
完全亂套!
只能保證最先輸出3 其次輸出4。
await後的 5 和 6 也不是在await後輸出。
結論是:所有的鉤子函式都只是在指定時間執行而已,框架並不關心它們執行的結果,所以你要做的是將async和await放到真正有非同步的methods的方法中。