- A+
arcgis js开发往往会遇到同步异步的问题,有可能在上一步使用了arcgis js模块回调函数,下一步需要用上一步回调函数的结果,但是因为JavaScript是异步执行的,它并不会等待上一步的回调函数结束了才执行下一步。
例如这里做一个属性查询功能,模糊查询state_name返回结果,showFindResult是findTask的回调函数,在回调函数统计结果的过程中,把每个图形结果加到resultGraphicArr中,此时就会出现上述问题。
可以看到右边表格里面有结果,但是输出的resultGraphicArr却显示了空数组,并且控制台输出其length也是0
将空数组点击展开发现有元素,因为控制台是会查询最新的信息,也就是说执行console.log(resultGraphicArr)
这条语句的时候确实没有元素,因为findTask的回调函数还没有执行完,因此是空数组,length为0,但是现在点击的时候回调函数已经执行完了,所以加载出来是三个元素,和表格是相符的。
但是下一步又要用到上一步的结果,如何处理?
这里记录一下自己使用的方法(也希望了解更多可行性方法)
采用定时器setInterval
和clearInterval
方法:
1.定义一个全局变量flag初始化为false,var flag = false;
2.在回调函数中加入判断,如果已经全部加到resultGraphicArr中去了,那么将flag变为true
3.在原来的直接输出resultGraphicArr的代码块上加上定时器,每500毫秒执行一次,判断flag是否为true,如果为true才输出,并清除掉定时器
4.此时问题解决,不再是空数组,里面有元素了。