文章詳情頁
html5 - Javascript單線程中消息隊列的執行疑問
瀏覽:111日期:2023-01-03 15:44:09
問題描述
陸陸續續看了一些js單線程,事件循環和消息隊列的文章,但是有一個疑問是,當event loop消息隊列的時候,假設里面有ajax和settimeout兩個消息,當但是settimeout是先進入消息隊列,ajax是后入,但是ajax先回饋結果了,settimout還沒有,這個時候,event loop應該是先執行ajax吧?其實結合日常開發我也知道應該是這么回事,但是我看一些文章好像說異步消息隊列也是按順序輪詢執行的,但是明明后面的比你先反饋,應該是先執行對把?
問題解答
回答1:ajax執行完,剩余事件進入 event loop. setTimeout 在延遲的時間結束時,將參數里的回掉放入event loop。
推薦你一個網站,在線掩飾event loophttp://latentflip.com/loupe
回答2:這個問題, 說起來比較長, 這里有篇文章, 很長但是建議深讀. Ajax知識體系大梳理 | louis blog當然sf的專欄也是有的: Ajax知識體系大梳理 - 路易斯聊前端如果有不明白的地方, 直接文章底下給我留言就行.
回答3:按照我這兩天看的情況,異步任務只有在完成相關觸發條件才會被推入“任務隊列”,等待主線程執行完同步任務按照先進先出的順序執行“任務隊列”中的任務。
標簽:
JavaScript
相關文章:
1. android - 分享到微信,如何快速轉換成字節數組2. javascript - 能否讓vue-cli的express修改express重啟服務3. 解決Android webview設置cookie和cookie丟失的問題4. angular.js - Beego 與 AngularJS的模板格式沖突,該怎么解決?5. javascript - vue2.0中,$refs對象為什么用駝峰的方式獲取不到屬性?6. node.js - npm一直提示proxy有問題7. html5 - 有人做過防微信app界面的H5 demo嗎?8. javascript - 有沒有iOS微信中可以在背景播放視頻的方法?9. 最新版本的微信web開發者工具必須要APPID,會提供測試號,但是像你一樣tabBar配置的話不會顯示首頁與日志,難道我要下載跟你一樣的版本?10. Navicat for mysql 中以json格式儲存的數據存在大量反斜杠,如何去除?
排行榜
