日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

jQuery中deferred对象的使用(二)

發(fā)布時(shí)間:2025/7/14 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jQuery中deferred对象的使用(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接上一回的內(nèi)容,漏了一個(gè)always()方法,參數(shù)也是回調(diào)函數(shù),與done和fail不同的是,無論任何情況都執(zhí)行always方法中的回調(diào)。

deferred對(duì)象的使用(二)

deferred對(duì)象不光可以用在jquery的ajax方法中,他提供了一系列的接口,使它的通用型大大提高。

比如有這樣一個(gè)耗時(shí)比較久的方法

function a(){function b(){alert('start');} setTimeout(b, 3000); }

如果要在這個(gè)方法之后執(zhí)行某個(gè)回調(diào),就不能用$.when()了,因?yàn)楫?dāng)$.when()的參數(shù)不為deferred對(duì)象是會(huì)直接調(diào)用done或者always中的回調(diào)函數(shù)。

這個(gè)時(shí)候就要使用deferred對(duì)象的其他方法了,還是上面的方法,做一些改寫

function a(){var def = $.Deferred(); // 創(chuàng)建deferred對(duì)象 function b(){alert('start');def.resolve(); // 改變deferred對(duì)象的狀態(tài) } setTimeout(b, 3000); return def; }$.when(a()).done(function(){alert("It's callback"); });

分析一下:

1. $.Deferred()方法會(huì)創(chuàng)建一個(gè)deferred對(duì)象

2. def.resolve()會(huì)改變deferred對(duì)象的狀態(tài),deferred對(duì)象有三種狀態(tài),未完成,成功,失敗。

它有resolve()和reject()兩個(gè)方法,resolve方法可以把對(duì)象狀態(tài)改為成功,reject方法可以把狀態(tài)改為失敗。

又有以上的寫法會(huì)出現(xiàn)問題,返回的deferred對(duì)象可以被外部改變狀態(tài),所以還提供了一個(gè)promise()方法,這個(gè)方法會(huì)在deferred對(duì)象的基礎(chǔ)上返回一個(gè)新的deferred對(duì)象,不同的是,返回的對(duì)象只存在可被觀察到狀態(tài),而不具備可改變其狀態(tài)的方法,類似返回了一個(gè)只讀的deferred對(duì)象。

所以同樣的例子可以改寫成這樣

function a(){var def = $.Deferred(); // 創(chuàng)建deferred對(duì)象 function b(){alert('start');def.resolve(); // 改變deferred對(duì)象的狀態(tài) } setTimeout(b, 3000); return def.promise(); }$.when(a().reject()).done(function(){ // reject()方法無效alert("It's callback"); });

?

轉(zhuǎn)載于:https://www.cnblogs.com/fxxkhigh/p/5535566.html

總結(jié)

以上是生活随笔為你收集整理的jQuery中deferred对象的使用(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。