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

  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呢? 我丢!因为大领导年纪大了 点的太慢了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值