Vue 3 中 watch 和 watchEffect 在异步请求竞态下的正确用法
在 Vue 3 项目里处理搜索框联想、路由参数变化重新拉取数据这类场景时,很多开发者会直接用 watch 或 watchEffect 发起异步请求,却忽略了请求返回顺序不确定带来的竞态问题。比如用户快速输入“a”、“ab”、“abc”,三个请求几乎同时发出,如果“a”的响应最后到达,界面就会显示错误的结果。这类 bug 在本地开发时很难复现,上线后却频繁出现,排查起来也容易被误认为是后端数据问题。问题的根源在于 watch 和 watchEffect 本身不会自动取消上一次未完成的异步操作,需要开发者手动管理取消逻辑或使用标志位丢弃过期响应。这篇文章会结合真实代码,讲清楚 watch 与 wa...