亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

deferred對(duì)象

沈建明 / 1326人閱讀

摘要:如果狀態(tài)是已完成,對(duì)象就是調(diào)用方法指定的回調(diào)函數(shù)如果狀態(tài)是已失敗,對(duì)象就是調(diào)用方法指定的回調(diào)函數(shù)。四對(duì)象的其他方法方法,接受兩個(gè)參數(shù),第一個(gè)參數(shù)是方法的回調(diào)函數(shù)第二個(gè)參數(shù)是方法的回調(diào)函數(shù)。

deferred對(duì)象

deferred對(duì)象就是jQuery的回調(diào)函數(shù)解決方案

javascript中有一些操作比較耗時(shí),如ajax操作,面對(duì)這樣的情況,我們通常會(huì)指定回調(diào)函數(shù)。所謂回調(diào)函數(shù)就當(dāng)這些操作結(jié)束后,應(yīng)該調(diào)用哪些函數(shù)。

一、傳統(tǒng)的ajax操作
$.ajax({
    url : index.html,
    success : function(){
        alert("success");
    },
    error : function(){
        alert("fail");
    }  
});

這里的success方法指定了操作成功后的回調(diào)函數(shù),fail方法指定了操作失敗后的回調(diào)函數(shù)。下面我們?cè)賮?lái)看一下,用deferred對(duì)象,寫法是怎樣的?

二、deferred對(duì)象的鏈?zhǔn)讲僮?/b>
$.ajax("index.html")
.done(function(){alert("success");})
.fail(function(){alert("fail");});

這里的done()相當(dāng)于success方法,fail()相當(dāng)于error方法。這種鏈?zhǔn)綄懛ê芮逦?、可讀性也很強(qiáng)。deferred對(duì)象的強(qiáng)大還不止于此。

1、deferred對(duì)象可以為一個(gè)操作指定多個(gè)回調(diào)函數(shù)。

$.ajax("index.html")
.done(function(){alert("success");})
.fail(function(){alert("fail");})
.done(function(){alert("第二個(gè)回調(diào)函數(shù)");});

像上面這樣,我們可以指定任意多個(gè)回調(diào)函數(shù),這些回調(diào)函數(shù)按順序執(zhí)行。

2、為多個(gè)操作指定回調(diào)函數(shù)

$.when($.ajax("index1.html"),$.ajax("index.html"))
.done(function(){alert("success");})
.fail(function(){alert("fail");});

這里我們用到了$.when()方法,這個(gè)方法的參數(shù)是deferred對(duì)象,這段代碼的意思是只有兩個(gè)操作都成功了,才運(yùn)行done()指定的回調(diào)函數(shù),其他情況運(yùn)行fail()指定的回調(diào)函數(shù).

三、普通操作的回調(diào)函數(shù)

deferred對(duì)象最大的有點(diǎn)在于,對(duì)于ajax操作、本地操作;異步操作、同步操作,都可以使用deferred對(duì)象的方法指定回調(diào)函數(shù).

比如說(shuō)有一個(gè)很耗時(shí)的操作wait:

var wait=function(){
    var tasks=function(){
        alert("執(zhí)行完畢");
    }
    setTimeout(tasks,5000); //真的很耗時(shí)
}

如果我們想為這個(gè)函數(shù)指定回調(diào)函數(shù),應(yīng)該怎么做呢?我們首先來(lái)深入的了解一下deferred對(duì)象.

1、三種執(zhí)行狀態(tài)

deferred對(duì)象有三種執(zhí)行狀態(tài):未完成、已完成、已失敗。如果狀態(tài)是已完成,deferred對(duì)象就是調(diào)用done()方法指定的回調(diào)函數(shù);如果狀態(tài)是已失敗,deferred對(duì)象就是調(diào)用fail()方法指定的回調(diào)函數(shù)。deferred.resolve()方法將執(zhí)行狀態(tài)從未完成改為已完成,從而調(diào)用done()方法;deferred.reject()方法將執(zhí)行狀態(tài)從未完成改為已失敗,從而調(diào)用fail()方法。

2、改變狀態(tài)

前面提到的ajax操作,deferred對(duì)象會(huì)根據(jù)返回的結(jié)果,自動(dòng)改變自身的狀態(tài);但在wait函數(shù)中,需要手動(dòng)改變 deferred的執(zhí)行狀態(tài),從而觸發(fā)相關(guān)回調(diào)函數(shù)。

3、deferred.promise()方法

deferred.promise()的作用是在原來(lái)deferred對(duì)象上返回另一個(gè)deferred對(duì)象,后者只開放與執(zhí)行狀態(tài)無(wú)關(guān)的方法(如 done() 方法和 fail() 方法),屏蔽改變執(zhí)行狀態(tài)有關(guān)的方法(如 resolve()方法reject() 方法)。

了解了以上三點(diǎn)之后,我們來(lái)為wait()函數(shù)指定回調(diào)函數(shù)。

var wait=function(){
    var dfd=$.Deferred(); //在函數(shù)內(nèi)部創(chuàng)建一個(gè)deferred對(duì)象
    var tasks=function(){
        alert("執(zhí)行完畢");
        dfd.resolve(); //改變執(zhí)行狀態(tài)
    }
    setTimeout(tasks,5000);
    return dfd.promise(); //返回promise對(duì)象
};

$.when(wait())
.done(function(){alert("success");})
.fail(function(){alert("fail");})

這里有三點(diǎn)需要注意:

最好在函數(shù)的內(nèi)部創(chuàng)建deferred對(duì)象,這樣可以防止在外部修改deferred對(duì)象的執(zhí)行狀態(tài)。

最好返回promise對(duì)象,還是防止執(zhí)行狀態(tài)在函數(shù)外部被改變。

要在合適的時(shí)候改變deferred對(duì)象的執(zhí)行狀態(tài),一般是在耗時(shí)的操作執(zhí)行完之后,改變deferred對(duì)象的執(zhí)行狀態(tài)。

這樣我們就完成了為普通操作添加回調(diào)函數(shù)。

四、deferred對(duì)象的其他方法

deferred.then()方法,接受兩個(gè)參數(shù),第一個(gè)參數(shù)是done()方法的回調(diào)函數(shù);第二個(gè)參數(shù)是fail()方法的回調(diào)函數(shù)。具體寫法如下:

$.when($.ajax("index.html"))
.then(successFunction , failFunction);

這樣省力了一下呢!

deferred.resolve(arg)方法是可以接受參數(shù)的,這個(gè)參數(shù)將會(huì)傳遞給通過(guò)deferred.thendeferred.done 添加的doneCallbacks

本文主要簡(jiǎn)單的介紹了一下deferred對(duì)象的使用場(chǎng)景和使用方法。

關(guān)于deferred對(duì)象的其他方法,請(qǐng)大家查看jquery官方文檔

我在學(xué)習(xí)過(guò)程中閱讀的相關(guān)文獻(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/82957.html

相關(guān)文章

  • jquery 中的 deferred 對(duì)象

    摘要:中文文檔簡(jiǎn)單說(shuō),對(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...

    Meathill 評(píng)論0 收藏0
  • jQuery的deferred對(duì)象詳解

    摘要:通常的做法是,為它們指定回調(diào)函數(shù)。簡(jiǎn)單說(shuō),對(duì)象就是的回調(diào)函數(shù)解決方案。指定操作成功時(shí)的回調(diào)函數(shù)指定操作失敗時(shí)的回調(diào)函數(shù)沒(méi)有參數(shù)時(shí),返回一個(gè)新的對(duì)象,該對(duì)象的運(yùn)行狀態(tài)無(wú)法被改變接受參數(shù)時(shí),作用為在參數(shù)對(duì)象上部署接口。 轉(zhuǎn)自:阮一峰:http://www.ruanyifeng.com/blo... 一、什么是deferred對(duì)象?開發(fā)網(wǎng)站的過(guò)程中,我們經(jīng)常遇到某些耗時(shí)很長(zhǎng)的javascri...

    lei___ 評(píng)論0 收藏0
  • jQuery Deferred對(duì)象

    摘要:給普通的操作指定回調(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)站的過(guò)程中,我們經(jīng)常遇到某些耗時(shí)很長(zhǎng)的javascript操作。其中,既有異步的操作(比如ajax讀取服務(wù)器數(shù)據(jù)),也有同步的操作(比如遍歷一個(gè)大型...

    baoxl 評(píng)論0 收藏0
  • 讀Zepto源碼之Deferred模塊

    摘要:為的項(xiàng),取出來(lái)的分別為和,所以上的和方法,調(diào)用的是中的方法,實(shí)質(zhì)是往各自的回調(diào)列表中添加回調(diào)函數(shù)。進(jìn)度回調(diào)函數(shù)數(shù)組。參數(shù)為異步對(duì)象的索引值,參數(shù)為對(duì)應(yīng)的上下文數(shù)組,即或,為對(duì)應(yīng)的回調(diào)函數(shù)數(shù)組,即或。 Deferred 模塊也不是必備的模塊,但是 ajax 模塊中,要用到 promise 風(fēng)格,必需引入 Deferred 模塊。Deferred 也用到了上一篇文章《讀Zepto源碼之C...

    yagami 評(píng)論0 收藏0
  • $.when().done().then()的用法

    摘要:通常的做法是,為它們指定回調(diào)函數(shù)。指定操作成功時(shí)的回調(diào)函數(shù)指定操作失敗時(shí)的回調(diào)函數(shù)沒(méi)有參數(shù)時(shí),返回一個(gè)新的對(duì)象,該對(duì)象的運(yùn)行狀態(tài)無(wú)法被改變接受參數(shù)時(shí),作用為在參數(shù)對(duì)象上部署接口。 jQuery的開發(fā)速度很快,幾乎每半年一個(gè)大版本,每?jī)蓚€(gè)月一個(gè)小版本。 每個(gè)版本都會(huì)引入一些新功能。今天我想介紹的,就是從jQuery 1.5.0版本開始引入的一個(gè)新功能----deferred對(duì)象。 這個(gè)功...

    KoreyLee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<