Vue中,如果wather不是同步更新的话,会放到一个队列中,同一事件循环结束后再更新。相关代码再scheduler的queueWatcher方法中。
这里面处理一个场景:
当这个队列正在更新时,又触发了wather。
if (!flushing) {
queue.push(watcher)
} else {
let i = queue.length - 1
while (i > index && queue[i].id > watcher.id) {
i--
}
queue.splice(i + 1, 0, watcher)
}
}不明白为什么要这么处理。直接push到最后不行吗?
现在这样的设计又有什么好处?
追加描述,
vue这段代码也并不是同一个时间循环中,还没执行这个wather,再次触发这个wather就只执行一次。
queue.splice(i + 1, 0, watcher)
这边是知道这个wather之前的index,并把第二次触发放到这个后面。也还是执行两次update。既然都是执行两次,为什么不直接push到最后
回首忆惘然
米脂
随时随地看视频慕课网APP
相关分类