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

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379109.html
標籤:JavaScript
上一篇:[面試題] 函式默認引數作用域
