jquery的deferred使用詳解

2022-01-11 10:00:07 字數 2289 閱讀 9666

原文:hhtps:

1.什麼是deferred物件

deferred物件是乙個延遲物件,意思是函式延遲到某個點才開始執行,改變執行狀態的方法有兩個(成功:resolve和失敗:reject),分別對應兩種執行**(成功**函式:done和失敗**函式fail)

2.deferred物件使用示例

ajax方式其實是deferred物件

1)普通的ajax操作

$.ajax(,

error: function ()

});

success,error函式在請求url響應後才開始執行

2)1.5版本後新的寫法

$.ajax("index.html")

.done(function () )

.fail(function () )

.done(function () );

新的寫法可以自由新增多個**函式,按新增的順序執行。

3)為多個ajax執行**函式

$.when($.ajax("index.html"), $.ajax("addorder2.html"))

.done(function () )

.fail(function () )

只有兩個ajax都請求成功,才會執行done函式

4)為普通方法指定**函式

var wait=function();

settimeout(tasks,5000);

};$.when(wait())

.done(function())

.fail(function());

wait不是乙個deferred物件,執行後沒有等待wait()函式執行結果,先執行**函式了。

加入deferred物件,**示例如下:

var dtd=$.deferred();

var wait=function(dtd);

settimeout(tasks,5000);

return dtd;

};$.when(wait(dtd))

.done(function())

.fail(function());

其中$.when()中的引數必須是個deferred物件,

dtd.resolve();改變執行狀態為成功,呼叫done**函式。

dtd.reject();改變執行狀態為失敗,呼叫fail**函式。

5)deferred物件的promise()方法

上例中,定義了乙個全域性的deferred物件,在deferred物件wait外部也可以呼叫改變執行狀態函式。

deferred物件呼叫promise()方法後,就只能執行**函式(done,fail)了,不能執行狀態改變函式(resolve,reject)

**示例如下:

var wait=function();

settimeout(tasks,5000);

return dtd.promise();

};var d=wait();

d.resolve();//執行執行狀態改變函式resolve不起任何作用!

$.when(d)

.done(function())

.fail(function());

since thejquery.getmethod returns a jqxhr object, which is derived from a deferred object, we can attach handlers using the.thenmethod.12

3456

7$.get( "test.php" ).then(

function() , function()

);

filter the resolve value:12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

deferred.then demotitle>

JQuery的deferred物件學習總結

什麼是deferred?可以幫助我們按規定的順序執行函式,比如說我們ajax請求資料之後,對dom進行資料填充,那我們就要先執行完ajax,拿到資料之後才能進行dom資料填充,所以這就是乙個順序執行的過程,傳統的做法是事先定義好 函式,當檢測到資料請求完成時,執行事先定義的 函式。但是,在 函式方面...

jQuery的deferred物件狀態還原

jquery的deferred物件的使用可以參考阮一峰的jquery的deferred物件詳解 js模組化開發時用到requirejs載入js,有兩個模組a和b,require a require b b依賴a,b中要使用a中非同步從後台載入的資料,想到了jquery的deferred物件,a中返回...

JS執行順序 (deferred 延遲佇列)

出現問題 函式功能 訪問資料庫函式 判斷資料是否為空 如果為空,則執行alert語句 後面省略 此執行結果為a b,原因是訪問資料庫比較慢,其他部分先執行。解決方法 var dtd deferred var wait function dtd settimeout tasks,0 return dt...