arcgis api for js回調函數如何等待同步
采用**定時器setInterval和clearInterval方法
arcgis js開發往往會遇到同步異步的問題,有可能在上一步使用了arcgis js子產品回調函數,下一步需要用上一步回調函數的結果,但是因為JavaScript是異步執行的,它并不會等待上一步的回調函數結束了才執行下一步。
例如這裡做一個屬性查詢功能,模糊查詢state_name傳回結果,showFindResult是findTask的回調函數,在回調函數統計結果的過程中,把每個圖形結果加到resultGraphicArr中,此時就會出現上述問題。
可以看到右邊表格裡面有結果,但是輸出的resultGraphicArr卻顯示了空數組,并且控制台輸出其length也是0
将空數組點選展開發現有元素,因為控制台是會查詢最新的資訊,也就是說執行<code>console.log(resultGraphicArr)</code>這條語句的時候确實沒有元素,因為findTask的回調函數還沒有執行完,是以是空數組,length為0,但是現在點選的時候回調函數已經執行完了,是以加載出來是三個元素,和表格是相符的。
但是下一步又要用到上一步的結果,如何處理?
這裡記錄一下自己使用的方法(也希望了解更多可行性方法)
采用定時器<code>setInterval</code>和<code>clearInterval</code>方法:
1.定義一個全局變量flag初始化為false,<code>var flag = false;</code>
2.在回調函數中加入判斷,如果已經全部加到resultGraphicArr中去了,那麼将flag變為true
3.在原來的直接輸出resultGraphicArr的代碼塊上加上定時器,每500毫秒執行一次,判斷flag是否為true,如果為true才輸出,并清除掉定時器
4.此時問題解決,不再是空數組,裡面有元素了。