关于一个宏任务微任务执行顺序问题:
父组件发请求获取数据->通过props传给子组件
子组件修改数据后,emit父组件父组件获取数据的函数->子组件数据更新`
父组件的获取数据函数:
getList(){
axios.get(`/getList`).then(res=>{
if(res.code==200){
this.tableData=res.data
}
})
},
父组件Template:
<template>
<child :tableData="tableData" :getList="getList"></child>
</template>
子组件的获取数据函数:
getData(){
this.tableData=[];
this.$emit('getList')
setTimeout(()=>{
this.list=this.tableData
console.log(this.tableData)
},100)
// this.$nextTick(()=>{
// console.log(this.tableData)
// this.list=this.tableData
// })
}
微任务会比宏任务先执行,现在有两种方法:
1.使用nextTick
但是在nextTick回调函数中赋值,this.tableData不是父组件getList请求完成后的数据,而是空数组
2.使用setTimeout
在setTimeout回调函数中赋值:
当设置延迟执行时间小于请求响应时间时,this.tableData不是父组件getList请求完成后的数据,而是空数组
只有当设置的延迟时间大于请求响应时间时,this.tableData才是父组件getList请求完成后的数据
请问这是为什么?不是微任务会先于宏任务执行吗?