問題描述:for循環中,異步調用后端接口無效(同時執行所有任務,導致頁面卡死)
提示:循環不能是異步的,for循環是同步任務,內部的異步任務會在for循環執行完成后執行
解決方法:循環中使用遞歸。使用遞歸函數在事件循環的單獨輪次中執行迭代,在事件循環的單獨輪次中執行遞歸,不會導致調用棧溢出。
()事件循環的每個輪次中調用其他事件處理程序的調用棧最初是空的)
這個問題涉及事件循環:
1、所有同步任務都在主線程上執行,形成一個“執行棧”
2、主線程之外,還存在一個“任務隊列”,只要異步任務有了結果,就在“任務隊列”中放置一個事件
3、一旦執行棧的所有同步任務完成,系統就讀取“任務隊列”對應異步任務,結束等待狀態,進入執行棧,開始執行(執行異步回調)
4、主線程不斷重復(3)步驟