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.此時問題解決,不再是空數組,里面有元素了。