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

猜你喜欢

转载自blog.csdn.net/lovecoding1/article/details/129404087