html5 - Javascript單線程中消息隊(duì)列的執(zhí)行疑問
問題描述
陸陸續(xù)續(xù)看了一些js單線程,事件循環(huán)和消息隊(duì)列的文章,但是有一個(gè)疑問是,當(dāng)event loop消息隊(duì)列的時(shí)候,假設(shè)里面有ajax和settimeout兩個(gè)消息,當(dāng)?shù)莝ettimeout是先進(jìn)入消息隊(duì)列,ajax是后入,但是ajax先回饋結(jié)果了,settimout還沒有,這個(gè)時(shí)候,event loop應(yīng)該是先執(zhí)行ajax吧?其實(shí)結(jié)合日常開發(fā)我也知道應(yīng)該是這么回事,但是我看一些文章好像說異步消息隊(duì)列也是按順序輪詢執(zhí)行的,但是明明后面的比你先反饋,應(yīng)該是先執(zhí)行對(duì)把?
問題解答
回答1:ajax執(zhí)行完,剩余事件進(jìn)入 event loop. setTimeout 在延遲的時(shí)間結(jié)束時(shí),將參數(shù)里的回掉放入event loop。
推薦你一個(gè)網(wǎng)站,在線掩飾event loophttp://latentflip.com/loupe
回答2:這個(gè)問題, 說起來比較長, 這里有篇文章, 很長但是建議深讀. Ajax知識(shí)體系大梳理 | louis blog當(dāng)然sf的專欄也是有的: Ajax知識(shí)體系大梳理 - 路易斯聊前端如果有不明白的地方, 直接文章底下給我留言就行.
回答3:按照我這兩天看的情況,異步任務(wù)只有在完成相關(guān)觸發(fā)條件才會(huì)被推入“任務(wù)隊(duì)列”,等待主線程執(zhí)行完同步任務(wù)按照先進(jìn)先出的順序執(zhí)行“任務(wù)隊(duì)列”中的任務(wù)。
相關(guān)文章:
1. 前端 - 應(yīng)該先從angularJS , vue.js , react 這些框架中的哪個(gè)開始入手?2. 用CSS3 box-sizing 屬性實(shí)現(xiàn)兩個(gè)并排的容器,如果想讓容器中間有間隔該如何實(shí)現(xiàn)3. 如何使api.douban.com域名可用,調(diào)用該域名時(shí)微信官方判斷該域名不被接受4. 域名解析在Ubuntu64 9.04計(jì)算機(jī)上的Java應(yīng)用程序中不起作用所有其他軟件可以正確解析DNS5. android - weex 項(xiàng)目createInstanceReferenceError: Vue is not defined6. javascript - 如圖,百度首頁,查看源代碼為什么什么都沒有?7. pdo 寫入到數(shù)據(jù)庫的內(nèi)容為中文的時(shí)候?qū)懭雭y碼8. PHP類封裝的插入數(shù)據(jù),總是插入不成功,返回false;9. android - 哪位大神知道java后臺(tái)的api接口的對(duì)象傳到前端后輸入日期報(bào)錯(cuò),是什么情況?求大神指點(diǎn)10. 怎么在phpstudy中用phpexcel上傳數(shù)據(jù)到MYSQL?
