整理一下關於jq佇列和回撥
整理一下關於jq佇列和回撥
jq佇列
首先說一點jQuery的佇列依賴快取機制事件,它同時是animate的基礎
它不像事件機制、快取機制、回撥機制一樣有自己的名稱空間,由於比較簡單,所以直接掛在到$和jQuery物件上
它提供的基礎方法有
jQuery.extend({
queue: function( elem, type, data ) {
var queue;
// 如果存在elem,也就是至少有一個引數
if ( elem ) {
// 如果有第二個引數,使用第二個引數加上“queue”,否則使用“fx” + “queue”(動畫佇列的名稱)
type = ( type || "fx" ) + "queue";
// 到jQuery內部使用的data_priv快取物件中去取已type為key的值
queue = data_priv.get( elem, type );
// 如果存在第三個引數
if ( data ) {
// 如果elem還沒有在cache中儲存過名為type的資料,或者需要儲存的資料時陣列
if ( !queue || jQuery.isArray( data ) ) {
queue = data_priv.access( elem, type, jQuery.makeArray(data) );
// 否則,直接將data推入到佇列中
} else {
queue.push( data );
}
}
// 返回佇列
return queue || [];
}
}, // 將資料按照某種型別儲存到elem上
dequeue: function( elem, type ) {}, // 從elem上刪除某種型別的資料
_queueHooks: function( elem, type ) {} // 內部使用
});
jQuery.fn.extend({
queue: function( type, data ) {},
dequeue: function( type ) {},
delay: function( time, type ) {},
clearQueue: function( type ) {},
promise: function( type, obj ) {}
});
jq使用Deferred
再簡單說一下 控制jq方法的執行順序
使用Deferred(從jQuery 1.5.0版本開始引入的一個新功能)來控制
簡單說一下使用方法:
首先註冊var def = $.Deferred();
註冊後var prs1 = def.then(自定義函式);
var prs2 = prs1.then(自定義函式); prs1函式執行完畢執行prs2函式
最後還需要觸發這個註冊 def.resolve(“0”);
即可
如上所述就可以控制程式的執行順序了
說一下jq這部分的原理
deferred物件是一個延遲物件,意思是函式延遲到某個點才開始執行,改變執行狀態的方法有兩個(成功:resolve和失敗:reject),分別對應兩種執行回撥(成功回撥函式:done和失敗回撥函式fail)
deferred物件的多種方法,下面給大家總結一下啊
(1) $.Deferred() 生成一個deferred物件。
(2) deferred.done() 指定操作成功時的回撥函式
(3) deferred.fail() 指定操作失敗時的回撥函式
(4) deferred.promise() 沒有引數時,返回一個新的deferred物件,該物件的執行狀態無法被改變;接受引數時,作用為在引數物件上部署deferred介面。
(5) deferred.resolve() 手動改變deferred物件的執行狀態為"已完成",從而立即觸發done()方法。
(6)deferred.reject() 這個方法與deferred.resolve()正好相反,呼叫後將deferred物件的執行狀態變為"已失敗",從而立即觸發fail()方法。
(7) $.when() 為多個操作指定回撥函式。
除了這些方法以外,deferred物件還有二個重要方法,上面的教程中沒有涉及到。
(8)deferred.then()
有時為了省事,可以把done()和fail()合在一起寫,這就是then()方法。
jq ajax回撥
這方面我直接說一下使用方法
function test(callback) {
var lastCode = "";
$.ajax({async : false,url:"",success:function(result){
callback(result);
}});
}
test(function(result){
//可以做你想做的事情了
})
相關文章
- 關於Callback回撥,傳遞引數
- 關於web容器request佇列和threadWeb佇列thread
- C語言關於回撥函式和this指標探討C語言函式指標
- 關於 js 中的回撥函式 callbackJS函式
- 關於 Laravel 佇列報錯Laravel佇列
- [JS]回撥函式和回撥地獄JS函式
- [iOS] [OC] 關於block回撥、高階函式“回撥再呼叫”及專案實踐iOSBloC函式
- 關於PHP佇列的問題PHP佇列
- 關於js回撥方法及遞迴時的使用JS遞迴
- 關於Yii2 微信支付回撥地址處理
- 佇列 和 迴圈佇列佇列
- 【Java 併發筆記】7 種阻塞佇列相關整理Java筆記佇列
- 瞭解一下Redis佇列【緩兵之計-延時佇列】Redis佇列
- 請教一下關於回滾段的擴充套件和收縮!套件
- 【詳細、開箱即用】.NET企業微信回撥配置(資料回撥URL和指令回撥URL驗證)
- Javascript的非同步和回撥JavaScript非同步
- 基於Guava API實現非同步通知和事件回撥GuavaAPI非同步事件
- C++屌屌的觀察者模式-同步回撥和非同步回撥C++模式非同步
- 佇列mq 相關佇列MQ
- 關於onPostCreate——Activity徹底執行起來之後的回撥
- 07-主佇列和全域性佇列佇列
- 佇列和棧佇列
- 棧和佇列佇列
- java閉包和回撥淺析Java
- 回撥函式(c和指標)函式指標
- 關於rpc的整理和理解RPC
- JavaScript關於陣列的一些方法整理JavaScript陣列
- 再看rabbitmq的交換器和佇列的關係MQ佇列
- Java:基於LinkedList實現棧和佇列Java佇列
- 關於js、jq零碎知識點JS
- 關於springmvc中常用的註解,自己也整理一下SpringMVC
- Activity生命週期回撥是如何被回撥的?
- 【資料結構】回顧表、棧、佇列資料結構佇列
- 回撥和spring的LambdaSafe類Spring
- 【真知拙見】回撥地獄和PromisePromise
- PHP 回撥、匿名函式和閉包PHP函式
- Java中的閉包(Closure)和回撥Java
- 回撥函式函式