@Watch('videoId')
watchLaserMethane(id) {
let p: any = this.getLaserMethaneLineList(id)
console.log("333333333333333")
p.then((data)=>{
console.log("1111111111111111111111")
this.lineData = data
if (this.lineData.length) {
this.pointData = this.lineData[0].points
} else {
this.pointData = []
}
})
}
getLaserMethaneLineList(videoId) {
let params = {
videoId: videoId
}
return new Promise((resolve, reject) => {
getLaserMethaneLineList(params).then( (res) => {
let { code, data } = res.data
if (code === 200) {
resolve(data)
} else {
reject()
}
})
})
}
@Watch('patrolSettingShow')
watchPatrolSettingShow(newVal) {
if (newVal) {
setTimeout(()=>{
console.log("2222222222222222222222222222")
if (this.lineData.length) {
this.$nextTick(()=>{
this.$refs.lineTable.setCurrentRow(this.lineData[0])
})
}
})
}
}
监听了两个数据,vidoeId先传过来,patrolSettingShow后传过来
理想的执行是watchLaserMethane()先执行,然后再去执行watchPatrolSettingShow()中的宏任务,
打印顺序是
3333333333333333333
1111111111111111111
2222222222222222222
但是在实际执行过程中,执行顺序如下:
3333333333333333333
2222222222222222222
1111111111111111111
请问为什么会出现这种setTimeout先于.then执行,跟watch执行顺序有关,还是函数同步异步有关。
如果想要变成watchLaserMethane()全部执行完毕再去执行watchPatrolSettingShow(),上述代码需要怎么改进。
改成同步的就行 async await