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