成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導(dǎo)航首頁 ? 技術(shù)教程 ? jQuery的deferred對象使用詳解
全站頭部文字 我要出現(xiàn)在這里
jQuery的deferred對象使用詳解 716 2024-02-17   

之前看別人的demo,發(fā)現(xiàn)在延遲對象被resolve時要執(zhí)行的代碼,有時會寫在deferred.then方法里執(zhí)行,有時會寫在deferred.done方法里執(zhí)行。

這讓對延遲對象一知半解的我非常困惑,今天抽時間研究了一下下,發(fā)現(xiàn):在某種環(huán)境下,兩個方法的確能實現(xiàn)同樣的效果。
這種特定的環(huán)境是怎樣呢?

先看一下deferred.done的用法:

// 創(chuàng)建deferred對象
var dtd = $.Deferred();
 
// 解決deferred對象
dtd.resolve('finish');
// 調(diào)用done方法
dtd.done(doneCallback [, doneCallback])
// 當(dāng)deferred對象被 resolve 時,執(zhí)行doneCallback函數(shù)
// 參數(shù)可為一個函數(shù)、多個函數(shù)或函數(shù)數(shù)組
// 返回原來的deferred或promise對象

再看下deferred.then的用法和特性:

// 創(chuàng)建deferred對象
var dtd = $.Deferred();
 
// 解決deferred對象
dtd.resolve('finish');
 
// 調(diào)用then方法
deferred.then(doneFilter [, failFilter] [, progressFilter])
// then方法特性:
// 當(dāng)deferred對象被resolve時,執(zhí)行doneFilter函數(shù)
// 當(dāng)deferred對象被reject時,執(zhí)行failFilter函數(shù)
// 當(dāng)dederred對象被progress時,執(zhí)行progressFilter函數(shù)
// 返回值:1,返回deferred的promise對象,可修改promise傳遞的值( 原來resolve,reject 的返回值為a,將a修改為b,返回b,該promise的done或fail收到的返回值變?yōu)閎 );
// 返回值:2,在then方法內(nèi)創(chuàng)建新的deferred對象并返回其promise
// 返回的promise對象可以鏈接其他的延遲對象,如done,fail,then等
// 多個then方法時,異步執(zhí)行( one by one )
// 該方法會過濾掉deferred修改狀態(tài)的方法,返回值deferred對象的promise 

根據(jù)以上兩個方法的特性,發(fā)現(xiàn):

deferred.then和deferred.done方法都可以直接收一個參數(shù)函數(shù),且第一個參數(shù)函數(shù)都是在deferred對象在resolve時被調(diào)用。

雖說then方法可改變返回值,但在不考慮返回值且只有一個參數(shù)函數(shù)的前提下,兩個方法的確可以實現(xiàn)一樣的效果。

相比之下,done方法更純粹吧,then方法會更復(fù)雜一些,但不能完全替代done方法,使用then方法的話,還是小心些的好。

附Deferred對象的其它方法:

// 創(chuàng)建延遲對象 <br>var dtd = $.Deferred();

var state = dtd.state();
// 返回deferred對象當(dāng)前狀態(tài),pending / resolved / rejected
// 不接受任何參數(shù)

deferred.always( alwaysCallback [, alwaysCallback] );
// 當(dāng)deferred對象被解決或拒絕時,都執(zhí)行此方法
// 參數(shù)可以是一個函數(shù),或是一個函數(shù)數(shù)組

dtd.promise( [obj] );
// 目的: 防止其他代碼干涉其內(nèi)部進度和狀態(tài)
// 返回新的promise對象,包含可以執(zhí)行的方法( done, fail, then, always, progress, state, promise ),
// 不包含修改Deferred狀態(tài)的方法( resolve, reject, notify, resolveWith, rejectWith, nodifyWith )
// 需返回deferred對象時,建議返回deferred.promise()

dtd.resolve( [args] )
// 解決deferred對象,調(diào)用所有doneCallback函數(shù)
// doneCallback可通過then方法中第一個參數(shù)設(shè)置,也可通過dtd.done( doneCallback )添加
// 參數(shù)將傳遞給doneCallback。參數(shù)可選
// 只有deferred對象的創(chuàng)建者才可以調(diào)用的方法
// doneCallback中this為deferred或promise對象
// doneCallback只接收一個參數(shù)

dtd.resolveWith( context [,args] )
// 解決deferred對象,調(diào)用所有doneCallback函數(shù)
// 參數(shù):第一個參數(shù)為上下文即this對象,doneCallback的this將被修改;第二個參數(shù)為數(shù)組
// doneCallback中this為調(diào)用resolveWith方法的上下文
// doneCallback接收參數(shù)個數(shù)為該方法第二個參數(shù)數(shù)組的長度
// 與resolve方法的區(qū)別在于,將改變doneCallback函數(shù)的this指向

dtd.reject( [args] )
// 拒絕deferred對象,調(diào)用所有failCallback函數(shù)
// failCallback可通過then方法中第二個參數(shù)設(shè)置,也可通過dtd.fail( failCallback )添加
// 參數(shù)將傳遞給failCallback。參數(shù)可選
// 只有deferred對象的創(chuàng)建者才可以調(diào)用的方法
// failCallback中this為deferred或promise對象
// failCallback只接收一個參數(shù)

dtd.rejectWith(context, [args] )
// 解決deferred對象,調(diào)用所有failCallback函數(shù)
// 參數(shù):第一個參數(shù)為上下文即this對象,failCallback的this將被修改;第二個參數(shù)為數(shù)組
// failCallback中this為調(diào)用rejectWith方法的上下文
// failCallback接收參數(shù)個數(shù)為該方法第二個參數(shù)數(shù)組的長度
// 與resolve方法的區(qū)別在于,將改變failCallback函數(shù)的this指向

dtd.notify( [args] )
// deferred進行處理時,調(diào)用所有的progressCallback函數(shù)
// progressCallback可通過then方法中的第3個參數(shù)設(shè)置,也可以通過deferred.progress( progressCallback )添加
// 通常此方法只能被deferred對象的創(chuàng)建者調(diào)用,可通過deferred.promise或then過濾此方法
// 參數(shù)可不寫。若寫有參數(shù),建議為字符串或可返回字符串的函數(shù)
// 當(dāng)deferred進入 resolved 或rejected狀態(tài)后,再調(diào)用notify方法,progressCallback將不再被執(zhí)行

dtd.notifyWith(context, [args] )
// deferred進行處理時, 調(diào)用所有progressCallback函數(shù)
// 參數(shù):第一個參數(shù)為上下文即this對象,progressCallback的this將被修改;第二個參數(shù)為數(shù)組
// progressCallback中this為調(diào)用rejectWith方法的上下文
// progressCallback接收參數(shù)個數(shù)為該方法第二個參數(shù)數(shù)組的長度
// 與resolve方法的區(qū)別在于,將改變progressCallback函數(shù)的this指向
// 當(dāng)deferred進入 resolved 或rejected狀態(tài)后,再調(diào)用notifyWith方法,progressCallback將不再被執(zhí)行


主站蜘蛛池模板: 爱欲1990未删减版播放| 小姐与流氓| angelina全集在线观看| 阎良之窗| 杨门女将演员表| 四川经济频道节目表| 成人的性行为免费| 《两座山》俄剧| 杨子姗演过的电影电视剧| 李耀| 腾浦惠| 苏教版二年级下册数学| 黑衣人| 全球gdp排名| 日本xxx.| 零下的风 完整版| 美丽在唱歌 电影| 喻繁图片| 茉莉2| 开创盛世电视剧全集免费观看 | 男女电视剧| 零食店加盟免费品牌| 泰国《永恒/eternity》| 山海经动画片全40集免费观看| 一江春水向东流 电视剧| 最新电影在线| 艳妇乳肉豪妇荡乳ⅹxxo电影| 老板5| 黄视频在线播放| 世间路| 吾栖之肤完整版在线观看| 男男女女 电影| 李玟雨| 深流 电视剧| 美丽在唱歌 电影| 金珊| 三年电影免费高清完整版| 在线播放啄木乌丝袜秘书| 林佑星| 牛油果营养价值| 自拍在线播放|

!!!站長長期在線接!!!

網(wǎng)站、小程序:定制開發(fā)/二次開發(fā)/仿制開發(fā)等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103