likes
comments
collection
share

tabs切换数据乱了,原来是竞态条件和数据竞争问题

作者站长头像
站长
· 阅读数 61

遇到一个业务场景,tabs切换三个标签页。每切换一个tabs,就会请求一次数据,然后把数据放到已经清空的一个数组内。那么因为有的数据多,有的少。就会造成第二个tabs的数据展示到第三个tsbs内。虽然这些数据会在切换时候拨乱反正。但这是个大问题。

百度后发现了有意思的事,这样的问题,最早出现在我还在读圣贤书的时候。而互联网大喷发时期则没多少。直到2022年8月5号左右,字节跳动,飞书发了这些文章去解决这个竞态问题。

1...字节---如何解决前端常见的竞态问题

2...飞书---前端提到的竞态问题,在 Android 上怎么解决?

3...otter---如何解决异步请求的竞态问题.三年前

看了这些顶级团队和顶尖大佬写的文章,我倍受启发。但是考虑到自己太菜,我准备从简单的手段搞起

第一点:这个问题为什么出现,不给这个问题开始的机会

1.分析其问题,乖徒儿,你指定没写loading!!

写了loading,会阻隔用户的非法操作,所以这种情况会被消灭在萌芽。这才是最靠谱的。此方法不适用于·数据竞争

第二点:问题发生了,怎么最小化影响?

1...撤回请求

如何挽回错误。比如你告白信息发给了你的领导,啊,这多是一件美事。 tabs切换数据乱了,原来是竞态条件和数据竞争问题 这个时候,你担心你领导看到了,怎么办?挽救啊,撤回鸭! 总结一下:

1.XMLHttpRequest 取消请求

2.fetch API 取消请求

3.axios 取消请求

4.可取消的 promise

详见字节的链接字节---如何解决前端常见的竞态问题

2...当请求都成功了,也来不及撤回了

1.指定是做数据区分,从数据层面将不同数据隔离起来

tabs1的结果放进data内,tabs2的数据也放到data内,好,tabs的数据也放进去。就在请求时候置空一下data。不够呀,小果子。这牵扯到了专业名词数据竞争

补充知识点:竞争条件与数据竞争

先来个引用原文 ANTOINE VAN DER LEE--- Race condition vs. Data Race: the differences explained 本文详细解释了,竞争条件与数据竞争的区别。解释的特别到位。值得一看

总结一下

其实,我个人更推荐写loading,相对而言不麻烦。要是撤回请求,数据区分,就稍微有点头痛了
转载自:https://juejin.cn/post/7146117854486609956
评论
请登录