摘要:不就是鏈?zhǔn)秸{(diào)用嘛,有何優(yōu)點(diǎn)優(yōu)點(diǎn)一可以清晰指定多個(gè)回調(diào)函數(shù)試想一下,如果用以前的編程模式,只能這么寫優(yōu)點(diǎn)二為多個(gè)操作指定回調(diào)函數(shù)用傳統(tǒng)的編程模式,只能重復(fù)寫等回調(diào)了。
在開發(fā)的過程,經(jīng)常會(huì)遇到一些耗時(shí)間的操作,比如ajax讀取服務(wù)器數(shù)據(jù)(異步操作),遍歷一個(gè)很大的數(shù)組(同步操作)。不管是異步操作,還是同步操作,總之就是不能立即得到結(jié)果,JS是單線程語音,不能立即得到結(jié)果,便會(huì)一直等待(阻塞)。
一般的做法就是用回調(diào)函數(shù)(callback),即事先定義好一個(gè)函數(shù),JS引擎不等待這些耗時(shí)的操作,而是繼續(xù)執(zhí)行下面的代碼,等這些耗時(shí)操作結(jié)束后,回來執(zhí)行事先定義好的那個(gè)函數(shù)。如下面的ajax代碼:
$.ajax({ url: "test.html", success: function(){ console.log("success"); }, error: function(){ console.log("error"); } });
但這樣寫不夠強(qiáng)大靈活,也很啰嗦。為此,jQuery1.5版本引入Deferred功能,為處理事件回調(diào)提供了更加強(qiáng)大而靈活的編程模式。
$.ajax("test.html") .done( function(){ console.log("success"); } ) .fail( function(){ console.log("error"); } );
不就是鏈?zhǔn)秸{(diào)用嘛,有何優(yōu)點(diǎn)?
優(yōu)點(diǎn)一:可以清晰指定多個(gè)回調(diào)函數(shù)
function fnA(){...} function fnB(){...} $.ajax("test.html").done(fnA).done(fnB);
試想一下,如果用以前的編程模式,只能這么寫:
function fnA(){...} function fnB(){...} $.ajax({ url: "test.html", success: function(){ fnA(); fnB(); } });
優(yōu)點(diǎn)二:為多個(gè)操作指定回調(diào)函數(shù)
$.when($.ajax("test1.html"), $.ajax("test2.html")) .done(function(){console.log("success");}) .fail(function(){console.log("error");});
用傳統(tǒng)的編程模式,只能重復(fù)寫success,error等回調(diào)了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/78248.html
摘要:中文文檔簡單說,對(duì)象就是的回調(diào)函數(shù)解決方案。為了讓回調(diào)函數(shù)的名字統(tǒng)一,便于在中使用。普通操作的回調(diào)函數(shù)接口對(duì)象的最大優(yōu)點(diǎn),就是它把這一套回調(diào)函數(shù)接口,從操作擴(kuò)展到了所有操作。指定操作成功時(shí)的回調(diào)函數(shù)。 參考鏈接 jQuery API中文文檔 jQuery.Deferred jQuery.when jQuery的deferred對(duì)象詳解 jQuery deferred 對(duì)象的 prom...
摘要:上篇文章中講到,使用的方法操作請(qǐng)求,會(huì)受到回調(diào)函數(shù)嵌套的問題。第一次回調(diào)第二次回調(diào)內(nèi)部實(shí)現(xiàn)上,和都是基于實(shí)現(xiàn)的對(duì)于多個(gè)同時(shí)請(qǐng)求,共同執(zhí)行同一個(gè)回調(diào)函數(shù)這一點(diǎn)上,有一個(gè)方法,接受多個(gè)對(duì)象實(shí)例,同時(shí)執(zhí)行。 上篇文章中講到,使用jquery的ajax方法操作ajax請(qǐng)求,會(huì)受到回調(diào)函數(shù)嵌套的問題。當(dāng)然,jquery團(tuán)隊(duì)也發(fā)現(xiàn)了這個(gè)問題,在2011年,也就是jquery 1.5版本之后,jQu...
摘要:通常的做法是,為它們指定回調(diào)函數(shù)。簡單說,對(duì)象就是的回調(diào)函數(shù)解決方案。指定操作成功時(shí)的回調(diào)函數(shù)指定操作失敗時(shí)的回調(diào)函數(shù)沒有參數(shù)時(shí),返回一個(gè)新的對(duì)象,該對(duì)象的運(yùn)行狀態(tài)無法被改變接受參數(shù)時(shí),作用為在參數(shù)對(duì)象上部署接口。 轉(zhuǎn)自:阮一峰:http://www.ruanyifeng.com/blo... 一、什么是deferred對(duì)象?開發(fā)網(wǎng)站的過程中,我們經(jīng)常遇到某些耗時(shí)很長的javascri...
摘要:通常的做法是,為它們指定回調(diào)函數(shù)。指定操作成功時(shí)的回調(diào)函數(shù)指定操作失敗時(shí)的回調(diào)函數(shù)沒有參數(shù)時(shí),返回一個(gè)新的對(duì)象,該對(duì)象的運(yùn)行狀態(tài)無法被改變接受參數(shù)時(shí),作用為在參數(shù)對(duì)象上部署接口。 jQuery的開發(fā)速度很快,幾乎每半年一個(gè)大版本,每兩個(gè)月一個(gè)小版本。 每個(gè)版本都會(huì)引入一些新功能。今天我想介紹的,就是從jQuery 1.5.0版本開始引入的一個(gè)新功能----deferred對(duì)象。 這個(gè)功...
摘要:給普通的操作指定回調(diào)函數(shù)對(duì)象的最大優(yōu)點(diǎn),就是它把這一套回調(diào)函數(shù)接口,從操作擴(kuò)展到了所有操作。方法用于指定對(duì)象狀態(tài)為已失敗時(shí)的回調(diào)函數(shù)。執(zhí)行完畢執(zhí)行成功執(zhí)行失敗接收一個(gè)或多個(gè)對(duì)象作為參數(shù),為其指定回調(diào)函數(shù)。 什么是deferred對(duì)象 開發(fā)網(wǎng)站的過程中,我們經(jīng)常遇到某些耗時(shí)很長的javascript操作。其中,既有異步的操作(比如ajax讀取服務(wù)器數(shù)據(jù)),也有同步的操作(比如遍歷一個(gè)大型...
閱讀 1513·2021-09-22 15:43
閱讀 2218·2019-08-30 15:54
閱讀 1225·2019-08-30 10:51
閱讀 2149·2019-08-29 18:35
閱讀 480·2019-08-26 11:58
閱讀 2534·2019-08-26 11:38
閱讀 2500·2019-08-23 18:35
閱讀 3724·2019-08-23 18:33