容易想到的是非同步過期的問題:設想第一層選單發生變化,觸發第二層選單內容的拉取,但網速較慢,過程需要3秒。 1秒後使用者再次改變第一級選單,再次觸發第二層選單內容的拉取,此時網速較快,1秒後資料返回,第二層選單重新渲染;但是1秒後,第一次請求的結果返回,第二級菜單再次被渲染,但事實上第一級菜單此後已經發生過變化,內容已經過期,此次渲染是錯誤的。我們可以用閉包進行資料過期校驗。
不容易想到的是同步過期(其實也是異步,只是未經io交互,都是緩衝時間為0的timeout函數)的問題,即由於事件隊列的存在,稍不謹慎就可能出現過期,程式碼中會有相關註解。
淡淡烟草味2017-05-18 11:00:31
作者說了嘛,就是緩衝時間為0的timeout函數.第一級選單對第二層選單的更新如果是寫在setTimeout()函數中,就是非同步操作,同樣會出現後面操作先更新介面,前面操作結果過期.