jQuery 中有一個 Queue 隊列的接口,這個模塊沒有單獨拿出來作為一個章節是因為這個是內部專門為動畫服務的。Queue 隊列如同 data 數據緩存與 Deferred 異步模型一樣,都是 jQuery 庫的內部實現的基礎設施。
Queue隊列
隊列是一種特殊的線性表,只允許在表的前端(隊頭)進行刪除操作(出隊),在表的后端(隊尾)進行插入操作(入隊)。隊列的特點是先進先出(FIFO-first in first out),即最先插入的元素最先被刪除。
為什么要引入隊列?
我們知道代碼的執行流有異步與同步之分,例如:
var a = 1; setTimeout(function(){ a = 2; },0) alert(a) //1
我們一直習慣于“線性”地編寫代碼邏輯,但是在 JavaScript 編程幾乎總是伴隨著異步操作:
setTimeout、CSS3Transition/Animation、ajax、dom 的繪制、postmessage、Web Database 等等,大量異步操作所帶來的回調函數會把我們的算法分解地支離破碎,之前我們說過對于“異步+回調”的模式,怎么“拉平”異步操作使之跟同步一樣,因為異步操作進行流程控制的時候無非避免的要嵌套大量的回調邏輯,所以就會出現 promises 約定了。
那么 jQuery 引入隊列其實從一個角度上可以認為:允許一系列函數被異步地調用而不會阻塞程序。
看一個代碼段:
$("#Aaron").slideUp().fadeIn()
這是 jQuery 的一組動畫鏈式序列,它的內部其實就是一組隊列 Queue,所以隊列和 Deferred 地位類似,是一個內部使用的基礎設施。
Queue 函數允許直接操作這個鏈式調用的行為,同時 Queue 可以指定隊列名稱獲得其他能力而不局限于 fx 隊列。
jQuery 提供了 2 組隊列操作的 API:
jQuery.queue/dequeue jQuery.fn.queue/dequeue
但是不同與普通隊列定義的是:
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報