领导,我感觉这个bug在针对我

文章描述了一个在统计医疗器械系统中出现的bug,该bug只在年轻领导使用时出现。问题在于异步请求数据与同步计算的混合操作,导致多线程条件竞争问题。解决方案是确保在异步数据返回后再进行计算。大领导未遇到问题可能是因为操作速度较慢,使得异步请求能顺序完成。
摘要由CSDN通过智能技术生成
  1. 这应该是我遇到最有意思的bug了,由于是公司内网项目我就不展示项目截图了,这个bug是我一个朋友问我的,他们公司做的统计医疗器械的系统。

  1. 功能简述:表格里每一行是可以选中的可以多选,每一次选中一行就会在底部统计你选中这些行设备的的总月销量。表格数据量很大,在每行的表格中并没有展示月销量,而是需要在点击这一行的时候拿到这一行的id后,去请求接口然后获取到此行的月销量,然后把你选中行的月销量加在一起,最后显示到底部总月销量。

  1. 奇怪的点:这个系统一年前就做好了,期间一直只给他的大领导用(一直没问题),可以最近换了一个年轻的领导之后,使用此系统算月销量的时候就有问题。

  1. 问题代码:

// 极度简化的代码
async function fetchCount(id){//根据选中这行的id去请求获取这行的月销量
   传入id是多少返回月销量是多少
}

let count = 0 //统计设备的月销量

async function addCount(id){
    count += await fetchCount(id) //count = count + await fetchCount(id)
}
addCount(1) // count:0 + 等待  -> 0+1 = 1
addCount(2) // count:0 + 等待  -> 0+2 = 2
// 2

多线程条件竞争问题,js不是多线程,但是js是异步的 。

如果你在一个表达式中 把异步数据和同步数据混合运算 一但这个异步行为上并发的,就会出现问题。

例:[...xxx , await xxx] 就会有问题

  1. 解决很简单

// 极度简化的代码
async function fetchCount(id){//根据选中这行的id去请求获取这行的月销量
   传入id是多少返回月销量是多少
}

let count = 0 //统计设备的月销量

async function addCount(id){
    const n = await fetchCount(id)
    count = const + n 
}
addCount(1) 
addCount(2) 

为什么大领导没这个bug呢? 我丢!因为大领导年纪大了 点的太慢了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值