bug解决记录——给远程搜索框赋值后显示的是id而不是name

  td描述:点击重置按钮后(前端会调用接口给表单赋值),原本显示名字的搜索框居然显示成id,而且该现象是偶现。
  一开始我一直花时间在复现该td,但是我发现一直复现不了。于是直接去看代码逻辑,我起初怀疑是$set的问题,但是如果是$set的话,该问题应该是必现。后面我把问题定位在是给选择框赋值的时候,下拉框中的数据还没加载好,搜索框会因为没找到匹配的项而直接展示成id。但是当我把加载下拉框中的数据放在setTimeout中执行时,居然还没办法复现这个td时,我对这个方向的定位产生了怀疑。后面我直接把加载下拉框中的数据的代码给注释了,于是问题就复现了。。。讲真,我在复现这个问题的时候,测试跟我说的是只有线上环境的火狐浏览器才会,于是我为为了直接复现这个td花了几个小时,现在看来这样做真的傻的一匹,原因有如下两点:
  1、测试的话并不完全可信,因为他们对于逻辑不严谨的代码产生的bug不会测试的面面俱到;
  2、很多时候,留心代码的逻辑,多调试,总是能看出漏洞在哪里

  那么为什么这个td是偶现呢,问题就出在了缓存。在还没重新加载下拉框中列表的时候,这个时候网页中保存的下拉框列表的数据是上一次搜索返回的,因此只要你上一次搜索的下拉列表包含了重置操作中返回的数据,就能够在下拉框中正常显示name。相反,如果上一次搜索框查询的数据不包括重置返回的数据,则会复现该td。(普通选择器没出现该bug的原因就在于普通的选择器下拉框的数据基本都是固定的,基本不存在从接口中取回的数据是下拉框中没有的情况。)所以我感觉这种不是必现的bug其实可以直接定位是不是缓存数据的问题,如果不是,再定位到其他方向上。
  这个td最后的解决方案是把给选择框赋值的操作放在$nextTick中去完成。普通选择器没出现该bug的原因就在于普通的选择器下拉框的数据基本都是固定的,基本不存在从接口中取回的数据是下拉框中没有的情况。