jQuery的deferred對(duì)象詳解


源代碼
return {
      readChartTemplateForCockpit: function (jsonTemplate, exportWebData, datasetLabel, jsonData) {
        var params = {};
        params.jsonTemplate = jsonTemplate;
        params.exportWebData = exportWebData;
        params.datasetLabel = datasetLabel;
        params.jsonData = jsonData;
        if (jsonTemplate && jsonTemplate.CHART) {
          jsonTemplate.CHART.outcomingEventsEnabled = true;
        }
        var deferred = $q.defer();
        sbiModule_restServices
          .promisePost('1.0/chart/jsonChartTemplate/readChartTemplateForCockpit', '', $httpParamSerializer(params), config)
          .then
          (
            function (response) {
              deferred.resolve(response.data);
            },
            function (response) {
              console.log('Error!!!')
            }
          );
        return deferred.promise
      },
      readChartTemplate: function (jsonTemplate, exportWebData, datasetLabel, jsonData) {
        var params = {};
        if ((jsonTemplate.CHART.groupCategories || jsonTemplate.CHART.groupSeries || jsonTemplate.CHART.groupSeriesCateg) && jsonTemplate.CHART.VALUES.CATEGORY.groupby != "") {
          var arrayOfCateg = [];
          arrayOfCateg.push(jsonTemplate.CHART.VALUES.CATEGORY)
          if (jsonTemplate.CHART.VALUES.CATEGORY.groupby.indexOf(',') == -1) {
            subs = jsonTemplate.CHART.VALUES.CATEGORY.groupby;
          }
          else {
            subs = angular.copy(jsonTemplate.CHART.VALUES.CATEGORY.groupby.substring(0, jsonTemplate.CHART.VALUES.CATEGORY.groupby.indexOf(',')));
          }
          var groupby = {};
          groupby['column'] = subs;
          groupby['groupby'] = "";
          groupby['name'] = subs;
          groupby['groupbyNames'] = "";
          groupby['orderColumn'] = jsonTemplate.CHART.VALUES.CATEGORY.orderColumn;
          groupby['orderType'] = jsonTemplate.CHART.VALUES.CATEGORY.orderType;
          ;
          groupby['stackedType'] = jsonTemplate.CHART.VALUES.CATEGORY.stackedType;
          groupby['stacked'] = jsonTemplate.CHART.VALUES.CATEGORY.stacked;
          arrayOfCateg.push(groupby);
          delete jsonTemplate.CHART.VALUES.CATEGORY;
          jsonTemplate.CHART.VALUES.CATEGORY = arrayOfCateg;
        }
        params.jsonTemplate = jsonTemplate;
        params.exportWebData = exportWebData;
        params.datasetLabel = datasetLabel;
        params.jsonData = jsonData;
        if (jsonTemplate && jsonTemplate.CHART) {
          jsonTemplate.CHART.outcomingEventsEnabled = true;
        }
        var deferred = $q.defer();
        sbiModule_restServices
          .promisePost('1.0/chart/jsonChartTemplate/readChartTemplate', '?SBI_EXECUTION_ID=' + sbiExecutionId, $httpParamSerializer(params), config)
          .then
          (
            function (response) {
              deferred.resolve(response.data);
            },
            function (response) {
              console.log('Error!!!')
            }
          );
        return deferred.promise
      },
      drilldownHighchart: function (breadcrumb) {
        var params = {};
        params.breadcrumb = breadcrumb;
        var deferred = $q.defer();
        sbiModule_restServices
          .promisePost('1.0/chart/jsonChartTemplate/drilldownHighchart', '?SBI_EXECUTION_ID=' + sbiExecutionId, $httpParamSerializer(params), config)
          .then
          (
            function (response) {
              deferred.resolve(eval("(" + response.data + ")"));
            },
            function (response) {
              console.log('Error!!!')
            }
          );
        return deferred.promise
      }
    }

deffered的使用說(shuō)明()
  • ajax的使用
       $.ajax({

    url: "test.html",

    success: function(){
      alert("哈哈描姚,成功了!");
    },

    error:function(){
      alert("出錯(cuò)啦戈次!");
    }

  });

運(yùn)行代碼示例
在上面的代碼中,$.ajax()接受一個(gè)對(duì)象參數(shù)筒扒,這個(gè)對(duì)象包含兩個(gè)方法:success方法指定操作成功后的回調(diào)函數(shù)怯邪,error方法指定操作失敗后的回調(diào)函數(shù)。

$.ajax()操作完成后花墩,如果使用的是低于1.5.0版本的jQuery悬秉,返回的是XHR對(duì)象,你沒(méi)法進(jìn)行鏈?zhǔn)讲僮鞅ⅲ蝗绻哂?.5.0版本和泌,返回的是deferred對(duì)象,可以進(jìn)行鏈?zhǔn)讲僮鳌?/p>

現(xiàn)在祠肥,新的寫(xiě)法是這樣的:

$.ajax("test.html")

  **.done(function(){ alert("哈哈武氓,成功了!"); })**

  **.fail(function(){ alert("出錯(cuò)啦仇箱!"); });**

(運(yùn)行代碼示例2
可以看到县恕,done()相當(dāng)于success方法,fail()相當(dāng)于error方法剂桥。采用鏈?zhǔn)綄?xiě)法以后忠烛,代碼的可讀性大大提高。

三权逗、指定同一操作的多個(gè)回調(diào)函數(shù)

deferred對(duì)象的一大好處美尸,就是它允許你自由添加多個(gè)回調(diào)函數(shù)。

還是以上面的代碼為例斟薇,如果ajax操作成功后师坎,除了原來(lái)的回調(diào)函數(shù),我還想再運(yùn)行一個(gè)回調(diào)函數(shù)奔垦,怎么辦屹耐?

很簡(jiǎn)單,直接把它加在后面就行了。

$.ajax("test.html")

.done(function(){ alert("哈哈惶岭,成功了寿弱!");} )

.fail(function(){ alert("出錯(cuò)啦!"); } )

.done(function(){ alert("第二個(gè)回調(diào)函數(shù)按灶!");} );

(運(yùn)行代碼示例3

回調(diào)函數(shù)可以添加任意多個(gè)症革,它們按照添加順序執(zhí)行。

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

deferred對(duì)象的另一大好處噪矛,就是它允許你為多個(gè)事件指定一個(gè)回調(diào)函數(shù),這是傳統(tǒng)寫(xiě)法做不到的铺罢。

請(qǐng)看下面的代碼艇挨,它用到了一個(gè)新的方法$.when()

.when(.ajax("test1.html"), $.ajax("test2.html"))

.done(function(){ alert("哈哈,成功了韭赘!"); })

.fail(function(){ alert("出錯(cuò)啦缩滨!"); });

(運(yùn)行代碼示例4

這段代碼的意思是,先執(zhí)行兩個(gè)操作.ajax("test1.html")和.ajax("test2.html")泉瞻,如果都成功了被济,就運(yùn)行done()指定的回調(diào)函數(shù)箫柳;如果有一個(gè)失敗或都失敗了趾徽,就執(zhí)行fail()指定的回調(diào)函數(shù)沃缘。

五、普通操作的回調(diào)函數(shù)接口(上)

deferred對(duì)象的最大優(yōu)點(diǎn)鞭达,就是它把這一套回調(diào)函數(shù)接口司忱,從ajax操作擴(kuò)展到了所有操作。也就是說(shuō)碉怔,任何一個(gè)操作----不管是ajax操作還是本地操作烘贴,也不管是異步操作還是同步操作----都可以使用deferred對(duì)象的各種方法,指定回調(diào)函數(shù)撮胧。

我們來(lái)看一個(gè)具體的例子桨踪。假定有一個(gè)很耗時(shí)的操作wait:

var wait = function(){

var tasks = function(){

alert("執(zhí)行完畢!");

};

setTimeout(tasks,5000);

};

我們?yōu)樗付ɑ卣{(diào)函數(shù)芹啥,應(yīng)該怎么做呢锻离?

很自然的,你會(huì)想到墓怀,可以使用$.when():

$.when(wait())

.done(function(){ alert("哈哈汽纠,成功了!"); })

.fail(function(){ alert("出錯(cuò)啦傀履!"); });

(運(yùn)行代碼示例5

但是虱朵,這樣寫(xiě)的話,done()方法會(huì)立即執(zhí)行,起不到回調(diào)函數(shù)的作用碴犬。原因在于$.when()的參數(shù)只能是deferred對(duì)象絮宁,所以必須對(duì)wait()進(jìn)行改寫(xiě):

var dtd = $.Deferred(); // 新建一個(gè)deferred對(duì)象

var wait = function(dtd){

var tasks = function(){

alert("執(zhí)行完畢!");

dtd.resolve(); // 改變deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

return dtd;

};

現(xiàn)在服协,wait()函數(shù)返回的是deferred對(duì)象绍昂,這就可以加上鏈?zhǔn)讲僮髁恕?/p>

$.when(wait(dtd))

.done(function(){ alert("哈哈,成功了偿荷!"); })

.fail(function(){ alert("出錯(cuò)啦窘游!"); });

(運(yùn)行代碼示例6

wait()函數(shù)運(yùn)行完,就會(huì)自動(dòng)運(yùn)行done()方法指定的回調(diào)函數(shù)跳纳。

六忍饰、deferred.resolve()方法和deferred.reject()方法

如果仔細(xì)看,你會(huì)發(fā)現(xiàn)在上面的wait()函數(shù)中棒旗,還有一個(gè)地方我沒(méi)講解喘批。那就是dtd.resolve()的作用是什么?

要說(shuō)清楚這個(gè)問(wèn)題铣揉,就要引入一個(gè)新概念"執(zhí)行狀態(tài)"。jQuery規(guī)定餐曹,deferred對(duì)象有三種執(zhí)行狀態(tài)----未完成逛拱,已完成和已失敗。如果執(zhí)行狀態(tài)是"已完成"(resolved),deferred對(duì)象立刻調(diào)用done()方法指定的回調(diào)函數(shù)台猴;如果執(zhí)行狀態(tài)是"已失敗"朽合,調(diào)用fail()方法指定的回調(diào)函數(shù);如果執(zhí)行狀態(tài)是"未完成"饱狂,則繼續(xù)等待曹步,或者調(diào)用progress()方法指定的回調(diào)函數(shù)(jQuery1.7版本添加)。

前面部分的ajax操作時(shí)休讳,deferred對(duì)象會(huì)根據(jù)返回結(jié)果讲婚,自動(dòng)改變自身的執(zhí)行狀態(tài);但是俊柔,在wait()函數(shù)中筹麸,這個(gè)執(zhí)行狀態(tài)必須由程序員手動(dòng)指定。dtd.resolve()的意思是雏婶,將dtd對(duì)象的執(zhí)行狀態(tài)從"未完成"改為"已完成"物赶,從而觸發(fā)done()方法。

類似的留晚,還存在一個(gè)deferred.reject()方法酵紫,作用是將dtd對(duì)象的執(zhí)行狀態(tài)從"未完成"改為"已失敗",從而觸發(fā)fail()方法。

var dtd = $.Deferred(); // 新建一個(gè)Deferred對(duì)象

var wait = function(dtd){

var tasks = function(){

alert("執(zhí)行完畢奖地!");

dtd.reject(); // 改變Deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

return dtd;

};

$.when(wait(dtd))

.done(function(){ alert("哈哈橄唬,成功了!"); })

.fail(function(){ alert("出錯(cuò)啦鹉动!"); });

(運(yùn)行代碼示例7

七轧坎、deferred.promise()方法

上面這種寫(xiě)法,還是有問(wèn)題泽示。那就是dtd是一個(gè)全局對(duì)象缸血,所以它的執(zhí)行狀態(tài)可以從外部改變。

請(qǐng)看下面的代碼:

var dtd = $.Deferred(); // 新建一個(gè)Deferred對(duì)象

var wait = function(dtd){

var tasks = function(){

alert("執(zhí)行完畢械筛!");

dtd.resolve(); // 改變Deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

return dtd;

};

$.when(wait(dtd))

.done(function(){ alert("哈哈捎泻,成功了!"); })

.fail(function(){ alert("出錯(cuò)啦埋哟!"); });

dtd.resolve();

(運(yùn)行代碼示例8

我在代碼的尾部加了一行dtd.resolve()笆豁,這就改變了dtd對(duì)象的執(zhí)行狀態(tài),因此導(dǎo)致done()方法立刻執(zhí)行赤赊,跳出"哈哈闯狱,成功了!"的提示框抛计,等5秒之后再跳出"執(zhí)行完畢哄孤!"的提示框。

為了避免這種情況吹截,jQuery提供了deferred.promise()方法瘦陈。它的作用是,在原來(lái)的deferred對(duì)象上返回另一個(gè)deferred對(duì)象波俄,后者只開(kāi)放與改變執(zhí)行狀態(tài)無(wú)關(guān)的方法(比如done()方法和fail()方法)晨逝,屏蔽與改變執(zhí)行狀態(tài)有關(guān)的方法(比如resolve()方法和reject()方法),從而使得執(zhí)行狀態(tài)不能被改變懦铺。

請(qǐng)看下面的代碼:

var dtd = $.Deferred(); // 新建一個(gè)Deferred對(duì)象

var wait = function(dtd){

var tasks = function(){

alert("執(zhí)行完畢捉貌!");

dtd.resolve(); // 改變Deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

return dtd.promise(); // 返回promise對(duì)象

};

var d = wait(dtd); // 新建一個(gè)d對(duì)象,改為對(duì)這個(gè)對(duì)象進(jìn)行操作

$.when(d)

.done(function(){ alert("哈哈阀趴,成功了昏翰!"); })

.fail(function(){ alert("出錯(cuò)啦!"); });

d.resolve(); // 此時(shí)刘急,這個(gè)語(yǔ)句是無(wú)效的

(運(yùn)行代碼示例9

在上面的這段代碼中棚菊,wait()函數(shù)返回的是promise對(duì)象。然后叔汁,我們把回調(diào)函數(shù)綁定在這個(gè)對(duì)象上面统求,而不是原來(lái)的deferred對(duì)象上面检碗。這樣的好處是,無(wú)法改變這個(gè)對(duì)象的執(zhí)行狀態(tài)码邻,要想改變執(zhí)行狀態(tài)折剃,只能操作原來(lái)的deferred對(duì)象。

不過(guò)像屋,更好的寫(xiě)法是allenm所指出的怕犁,將dtd對(duì)象變成wait()函數(shù)的內(nèi)部對(duì)象。

var wait = function(dtd){

var dtd = $.Deferred(); //在函數(shù)內(nèi)部己莺,新建一個(gè)Deferred對(duì)象

var tasks = function(){

alert("執(zhí)行完畢奏甫!");

dtd.resolve(); // 改變Deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

return dtd.promise(); // 返回promise對(duì)象

};

$.when(wait())

.done(function(){ alert("哈哈,成功了凌受!"); })

.fail(function(){ alert("出錯(cuò)啦阵子!"); });

(運(yùn)行代碼示例10

八、普通操作的回調(diào)函數(shù)接口(中)

另一種防止執(zhí)行狀態(tài)被外部改變的方法胜蛉,是使用deferred對(duì)象的建構(gòu)函數(shù)$.Deferred()挠进。

這時(shí),wait函數(shù)還是保持不變誊册,我們直接把它傳入$.Deferred():

$.Deferred(wait)

.done(function(){ alert("哈哈领突,成功了!"); })

.fail(function(){ alert("出錯(cuò)啦案怯!"); });

(運(yùn)行代碼示例11

jQuery規(guī)定攘须,.Deferred()可以接受一個(gè)函數(shù)名(注意,是函數(shù)名)作為參數(shù)殴泰,.Deferred()所生成的deferred對(duì)象將作為這個(gè)函數(shù)的默認(rèn)參數(shù)。

九浮驳、普通操作的回調(diào)函數(shù)接口(下)

除了上面兩種方法以外悍汛,我們還可以直接在wait對(duì)象上部署deferred接口。

var dtd = $.Deferred(); // 生成Deferred對(duì)象

var wait = function(dtd){

var tasks = function(){

alert("執(zhí)行完畢至会!");

dtd.resolve(); // 改變Deferred對(duì)象的執(zhí)行狀態(tài)

};

setTimeout(tasks,5000);

};

dtd.promise(wait);

wait.done(function(){ alert("哈哈离咐,成功了!"); })

.fail(function(){ alert("出錯(cuò)啦奉件!"); });

wait(dtd);

(運(yùn)行代碼示例12

這里的關(guān)鍵是dtd.promise(wait)這一行宵蛀,它的作用就是在wait對(duì)象上部署Deferred接口。正是因?yàn)橛辛诉@一行县貌,后面才能直接在wait上面調(diào)用done()和fail()术陶。

十、小結(jié):deferred對(duì)象的方法

前面已經(jīng)講到了deferred對(duì)象的多種方法煤痕,下面做一個(gè)總結(jié):

(1) $.Deferred() 生成一個(gè)deferred對(duì)象梧宫。

(2) deferred.done() 指定操作成功時(shí)的回調(diào)函數(shù)

(3) deferred.fail() 指定操作失敗時(shí)的回調(diào)函數(shù)

(4) deferred.promise() 沒(méi)有參數(shù)時(shí)接谨,返回一個(gè)新的deferred對(duì)象,該對(duì)象的運(yùn)行狀態(tài)無(wú)法被改變塘匣;接受參數(shù)時(shí)脓豪,作用為在參數(shù)對(duì)象上部署deferred接口。

(5) deferred.resolve() 手動(dòng)改變deferred對(duì)象的運(yùn)行狀態(tài)為"已完成"忌卤,從而立即觸發(fā)done()方法扫夜。

(6)deferred.reject() 這個(gè)方法與deferred.resolve()正好相反,調(diào)用后將deferred對(duì)象的運(yùn)行狀態(tài)變?yōu)?已失敗"驰徊,從而立即觸發(fā)fail()方法笤闯。

(7) $.when() 為多個(gè)操作指定回調(diào)函數(shù)。

除了這些方法以外辣垒,deferred對(duì)象還有二個(gè)重要方法望侈,上面的教程中沒(méi)有涉及到。

(8)deferred.then()

有時(shí)為了省事勋桶,可以把done()和fail()合在一起寫(xiě)脱衙,這就是then()方法。

.when(.ajax( "/main.php" ))

.then(successFunc, failureFunc );

如果then()有兩個(gè)參數(shù)例驹,那么第一個(gè)參數(shù)是done()方法的回調(diào)函數(shù)捐韩,第二個(gè)參數(shù)是fail()方法的回調(diào)方法。如果then()只有一個(gè)參數(shù)鹃锈,那么等同于done()荤胁。

(9)deferred.always()

這個(gè)方法也是用來(lái)指定回調(diào)函數(shù)的,它的作用是屎债,不管調(diào)用的是deferred.resolve()還是deferred.reject()仅政,最后總是執(zhí)行。

$.ajax( "test.html" )

.always( function() { alert("已執(zhí)行盆驹!");} );

(致謝:本文第一稿發(fā)表后圆丹,allenm來(lái)信指出原文對(duì)promise()的理解是錯(cuò)的。現(xiàn)在的第二稿是根據(jù)他的文章修改的躯喇,在此我表示衷心感謝辫封。)

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廉丽,隨后出現(xiàn)的幾起案子倦微,更是在濱河造成了極大的恐慌,老刑警劉巖正压,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欣福,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蔑匣,警方通過(guò)查閱死者的電腦和手機(jī)劣欢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門棕诵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凿将,你說(shuō)我怎么就攤上這事校套。” “怎么了牧抵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵笛匙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我犀变,道長(zhǎng)妹孙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任获枝,我火速辦了婚禮蠢正,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘省店。我一直安慰自己嚣崭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布懦傍。 她就那樣靜靜地躺著雹舀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粗俱。 梳的紋絲不亂的頭發(fā)上说榆,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音寸认,去河邊找鬼签财。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偏塞,可吹牛的內(nèi)容都是我干的荠卷。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼烛愧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了掂碱?” 一聲冷哼從身側(cè)響起怜姿,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疼燥,沒(méi)想到半個(gè)月后沧卢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡醉者,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年但狭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了披诗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡立磁,死狀恐怖呈队,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唱歧,我是刑警寧澤宪摧,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站颅崩,受9級(jí)特大地震影響几于,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沿后,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一沿彭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尖滚,春花似錦喉刘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至置逻,卻和暖如春推沸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背券坞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工鬓催, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恨锚。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓宇驾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親猴伶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子课舍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一、什么是deferred對(duì)象他挎? 開(kāi)發(fā)網(wǎng)站的過(guò)程中筝尾,我們經(jīng)常遇到某些耗時(shí)很長(zhǎng)的javascript操作。其中办桨,既有...
    你為什么無(wú)理取鬧閱讀 399評(píng)論 0 4
  • 一筹淫、什么是deferred對(duì)象? 開(kāi)發(fā)網(wǎng)站的過(guò)程中呢撞,我們經(jīng)常遇到某些耗時(shí)很長(zhǎng)的javascript操作损姜。其中饰剥,既有...
    壯哉我大前端閱讀 258評(píng)論 0 1
  • jQuery的deferred對(duì)象詳解 作者: 阮一峰 日期: 2011年8月16日 jQuery的開(kāi)發(fā)速度很快...
    nico1988閱讀 1,554評(píng)論 0 1
  • jQuery的deferred對(duì)象詳解 作者:阮一峰 一、什么是deferred對(duì)象摧阅? 開(kāi)發(fā)網(wǎng)站的過(guò)程中汰蓉,我們經(jīng)常...
    JamHsiao_aaa4閱讀 318評(píng)論 0 0
  • 書(shū)名:《高速閱讀法》 作者名:保羅·R·席列 用時(shí):復(fù)習(xí)15分鐘,激活1小時(shí)逸尖,思維導(dǎo)圖2小時(shí)(好像激活了兩遍) 其...
    李逸嫣Cindia閱讀 642評(píng)論 0 0