项目绘制图表时需要同时请求3个数据,即同时发送了3个get请求后,需要等到3个请求的数据都返回后,对数据进行处理。
我自己原先的逻辑大致如下:
在每个数据返回以后改变对应数据标记,都检查一下3个数据标记都为真时开始处理
ex:
dataflag1=true;
function resolvedata(param1,param2,...)
{
if(!(dataflag1 && dataflag2 && dataflag3))
{
return [];
}
//continue;
}
但是发现任然会有数据未到就开始处理的情况,但这个时候数据标记已经置为真了。最后排查问题,出在JS的异步通信回调机制出现的问题,在运行完dataflag1=true后,其他数据请求返回,被打断执行,而之后的处理还未进行。导致了BUG的偶尔复现。
解决办法,在function中加入回调
unction resolvedata(param1,param2,...,callback)
{
callback();
if(!(dataflag1 && dataflag2 && dataflag3))
{
return [];
}
//continue;
}
resoledata(param1,param2,....,function(){dataflag1=true;})