中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

深入解析jQuery中Deferred的deferred.promise()方法
來源:易賢網 閱讀:1136 次 日期:2016-07-06 10:32:13
溫馨提示:易賢網小編為您整理了“深入解析jQuery中Deferred的deferred.promise()方法”,方便廣大網友查閱!

這篇文章主要介紹了jQuery中Deferred的deferred.promise()方法,提醒千萬要注意deferred.promise()與jQuery的.promise() 實例方法的區別,需要的朋友可以參考下

deferred.promise() 和 .promise()

這兩個API語法幾乎一樣,但是有著很大的差別。deferred.promise()是Deferred實例的一個方法,他返回一個Deferred.Promise實例。一個Deferred.Promise對象可以理解為是deferred對象的一個視圖,它只包含deferred對象的一組方法,包括:done(),then(),fail(),isResolved(), isRejected(), always(),這些方法只能觀察一個deferred的狀態,而無法更改deferred對象的內在狀態。這非常適合于API的封裝。例如一個deferred對象的持有者可以根據自己的需要控制deferred狀態的狀態(resolved或者rejected),但是可以把這個deferred對象的Promise對象返回給其它的觀察者,觀察者只能觀察狀態的變化綁定相應的回調函數,但是無法更改deferred對象的內在狀態,從而起到很好的隔離保護作用。

deferred.promise()

$(function(){ 

  // 

  var deferred = $.Deferred(); 

  var promise = deferred.promise(); 

  var doSomething = function(promise) { 

    promise.done(function(){ 

      alert('deferred resolved.'); 

    }); 

  }; 

  deferred.resolve(); 

  doSomething(promise); 

}) 

deferred.promise()也可以接受一個object參數,此時傳入的object將被賦予Promise的方法,并作為結果返回。

// Existing object 

var obj = { 

 hello: function( name ) { 

  alert( "Hello " + name ); 

 } 

}, 

// Create a Deferred 

defer = $.Deferred(); 

// Set object as a promise 

defer.promise( obj ); 

// Resolve the deferred 

defer.resolve( "John" ); 

// Use the object as a Promise 

obj.done(function( name ) { 

 this.hello( name ); // will alert "Hello John" 

}).hello( "Karl" ); // will alert "Hello Karl" 

deferred.promise() 只是阻止其他代碼來改變這個 deferred 對象的狀態。可以理解成,通過 deferred.promise() 方法返回的 deferred promise 對象,是沒有 resolve ,reject, progress , resolveWith, rejectWith , progressWith 這些可以改變狀態的方法,你只能使用 done, then ,fail 等方法添加 handler 或者判斷狀態。

deferred.promise() 改變不了 deferred 對象的狀態,作用也不是保證目前的狀態不變,它只是保證你不能通過 deferred.promise() 返回的 deferred promise 對象改變 deferred 對象的狀態。如果我們這個地方直接返回 dtd,也是可以工作的,.done 的處理函數還是會等到 dtd.resolve() 之后才會執行.

具體在那篇博客的例子, 如果我們把代碼改成如下的形式:

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

var wait = function(dtd){

  var tasks = function(){

    alert("執行完畢!");

    dtd.resolve(); // 改變deferred對象的執行狀態

  };

  setTimeout(tasks,5000);

  return dtd;

};

$.when(wait(dtd))

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

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

這樣的執行結果和先前返回 dtd.promise 的結果是一樣的。

差別在什么地方呢?如果我們把 $.when 的這塊的代碼改成這樣的:

var d = wait(dtd);

$.when(d)

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

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

d.resolve();

我們會發現 alert(“哈哈,成功了!”) 會立即執行,“執行完畢”卻需要5秒后才彈出來。

但是如果我們 wait 函數最后是 return dtd.promise() 這里 d.resolve() 就會報錯了,因為對象 d 不存在 resolve() 方法。

同樣如果我們把代碼改成:

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

var wait = function(dtd){

  var tasks = function(){

     alert("執行完畢!");

     dtd.resolve(); // 改變deferred對象的執行狀態

   };

   setTimeout(tasks,5000);

   return dtd.promise();

};

dtd.resolve();

$.when( wait(dtd))

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

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

我們也可以發現 alert(“哈哈,成功了!”) 會立即執行,因為 dtd 這個 deferred 對象在被傳入 wait 之前,已經被 resolve() 了,而 deferred 對象一旦被 resolve 或者 reject 之后,狀態是不會改變的。

然后我們再把 $.wait 這塊的代碼改成:

$.when( wait(dtd))

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

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

dtd.resolve();

我們也會發現 alert(“哈哈,成功了!”); 被立即執行,雖然 wait(dtd) 執行的時候, dtd 還沒有被 resolve,而且 wait 方法返回的是 dtd.promise(), 但是 dtd 這個原始的 deferred 對象是暴露在外面的,我們還是可以從外面改變它的狀態。

于是,如果我們真的不想讓其他代碼能改變 wait 方法內部的 deferred 對象的狀態,那我們應該寫成這樣:

var wait = function(){

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

  var tasks = function(){

    alert("執行完畢!");

     dtd.resolve(); // 改變deferred對象的執行狀態

   };

   setTimeout(tasks,5000);

   return dtd.promise();

};

$.when( wait())

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

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

也就是不要把 deferred 直接暴露出來,最后返回 deferred.promise() ,讓其他地方的代碼只能添加 handler 。

.promise()

首先這不是Deferred實例的方法!該方法是jQuery實例的方法。該方法用于一組類型的動作(例如動畫)全部完成后返回一個Promise對象,供事件監聽器監聽其狀態并執行相應的處理函數。

該方法接受兩個可選參數:.promise( [type,] [target] )

type:隊列的類型,默認值是fx,fx即jQuery對象的動畫. 

targetObject :要賦予Promise行為的對象,

這兩個參數是可選的。其中第一個參數(我)目前除了fx還沒有找到其他的值類型。因此一般都是用于動畫的監控,在動畫完成后做一些操作。

例子:沒有動畫效果直接返回一個resolved狀態的promise對象

var div = $( "<div />" ); 

div.promise().done(function( arg1 ) { 

 // 將會被馬上觸發 

 alert( this === div && arg1 === div ); 

}); 

例子:在動畫效果全部完成后觸發done()監聽函數

<!DOCTYPE html> 

<html> 

<head> 

 <style> 

div { 

 height: 50px; width: 50px; 

 float: left; margin-right: 10px; 

 display: none; background-color: #090; 

</style> 

 <script src="http://code.jquery.com/jquery-latest.js"></script> 

</head> 

<body> 

<button>Go</button> 

<p>Ready...</p> 

<div></div> 

<div></div> 

<div></div> 

<div></div> 

<script> 

$("button").bind( "click", function() { 

 $("p").append( "Started..."); 

 //每個div執行動畫效果 

 $("div").each(function( i ) { 

  $( this ).fadeIn().fadeOut( 1000 * (i+1) ); 

 }); 

 //$("div")包含一組div,在所有的div都完成自己的動畫效果后觸發done()函數 

 $( "div" ).promise().done(function() { 

  $( "p" ).append( " Finished! " ); 

 }); 

}); 

</script> 

</body> 

</html> 

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美aⅴ99久久黑人专区| 久久久精品国产免大香伊| 99riav国产精品| 亚洲国产精品v| 国产日韩av一区二区| 国产欧美一区二区三区久久 | 久久久综合免费视频| 亚洲综合99| 久久久另类综合| 欧美成人精品在线播放| 国产精品va在线播放我和闺蜜| 国产精品vvv| 国产日韩精品一区二区浪潮av| 伊人成年综合电影网| 一区二区三区国产在线观看| 午夜精品久久久久久久久久久久久| 久久精品国内一区二区三区| 欧美精品一区二区三区在线播放| 欧美日韩在线精品| 国内精品福利| 亚洲一区免费在线观看| 欧美国产第二页| 国产精品乱码久久久久久| 亚洲国产成人精品女人久久久| 亚洲精品乱码久久久久久黑人| 亚洲一区二区三区视频| 欧美激情亚洲另类| 国产一区二区无遮挡| 91久久夜色精品国产九色| 久久精品水蜜桃av综合天堂| 欧美午夜国产| 亚洲一区二区动漫| 欧美国产日韩精品| 国产欧美日韩精品在线| 99国内精品| 欧美不卡一卡二卡免费版| 国产精品成人久久久久| 亚洲国产欧美精品| 午夜久久资源| 欧美色图一区二区三区| 久久久国产精品亚洲一区 | 欧美大胆a视频| 欧美午夜精品一区| 亚洲福利精品| 快播亚洲色图| 久久精品国产91精品亚洲| 欧美二区视频| 欧美日韩国产在线观看| 激情久久中文字幕| 国产精品尤物| 亚洲精品一区二区三| 国产色综合久久| 国产亚洲欧美中文| 欧美亚洲一区二区三区| 午夜精品久久久99热福利| 久久久久久网站| 国产精品视频午夜| 亚洲一本视频| 欧美午夜大胆人体| 亚洲天堂激情| 国产精品99一区| 亚洲国产美女久久久久| 欧美成人免费播放| 亚洲精品影院在线观看| 国产精品久久久久高潮| 午夜精品视频| 最新亚洲电影| 欧美午夜片在线免费观看| 亚洲一区视频在线| 在线看无码的免费网站| 美女亚洲精品| 亚洲专区在线视频| 国产午夜精品福利| 噜噜噜噜噜久久久久久91 | 另类天堂视频在线观看| 久久精品国产亚洲5555| 欧美男人的天堂| 亚洲第一精品夜夜躁人人爽| 欧美一区二区三区久久精品| 国产九色精品成人porny| 亚洲欧美精品在线| 免费亚洲电影在线| 国产精品婷婷午夜在线观看| 国产精品久久精品日日| 美女网站在线免费欧美精品| 在线观看视频亚洲| 欧美精品成人在线| 亚洲网站在线观看| 国外视频精品毛片| 欧美xxxx在线观看| 亚洲一区二区三区久久 | 欧美 日韩 国产在线| 亚洲欧美日韩国产综合| 国产一区观看| 国产精品激情| 老牛嫩草一区二区三区日本| 亚洲大片精品永久免费| 国产精品美女久久久久久免费| 久久九九国产| 久久99伊人| 亚洲少妇一区| 国产日韩精品在线播放| 欧美色图天堂网| 欧美va亚洲va香蕉在线| 久久精品视频99| 亚洲午夜精品久久久久久浪潮| 日韩视频中文字幕| 精品二区久久| 亚洲国产精品一区二区久| 一区二区三区久久久| 狠狠色丁香婷婷综合影院| 欧美欧美在线| 久久久成人网| 久久久噜噜噜久久中文字免| 一区二区国产在线观看| 亚洲精品国产欧美| 影音先锋久久精品| 国产视频亚洲精品| 国产一区二区三区四区三区四| 欧美日韩亚洲综合| 欧美日韩国产另类不卡| 乱中年女人伦av一区二区| 香蕉久久夜色精品国产| 午夜亚洲福利| 亚洲欧美久久久| 欧美在线观看一区二区| 亚洲欧美日韩国产成人精品影院| 亚洲国产精品一区二区第一页 | 老司机精品视频网站| 午夜精品久久久久久久99热浪潮 | 久久人人爽爽爽人久久久| 亚洲黄色在线观看| 一区二区日韩| 亚洲伦理精品| 亚洲综合精品自拍| 亚洲欧美日韩直播| 夜夜嗨av色一区二区不卡| 亚洲一级特黄| 亚洲男人的天堂在线| 久久久九九九九| 久久精品亚洲热| 欧美色网在线| 国产欧美精品一区二区三区介绍 | 欧美人与禽猛交乱配视频| 亚洲国产黄色片| 亚洲黑丝在线| 亚洲国产天堂久久综合网| 艳妇臀荡乳欲伦亚洲一区| 亚洲高清色综合| 1024国产精品| 亚洲精品日韩久久| 亚洲日本欧美天堂| 亚洲开发第一视频在线播放| 99热在这里有精品免费| 亚洲一区二区欧美| 精品999在线播放| 亚洲电影在线看| 国内精品99| 日韩天堂在线视频| 一本色道久久综合精品竹菊 | 老司机成人在线视频| 欧美自拍偷拍午夜视频| 老司机亚洲精品| 国产精品免费视频xxxx| 久久精品女人的天堂av| 免费黄网站欧美| 国产精品精品视频| 在线观看精品视频| 亚洲深夜福利| 欧美日本国产精品| 国产在线一区二区三区四区| 亚洲国产一区二区三区青草影视| 99国内精品| 久久亚洲精品视频| 国产精品入口| 亚洲片在线资源| 欧美一级久久| 欧美日在线观看| 亚洲电影免费观看高清完整版| 亚洲一区二区三区视频播放| 亚洲激情av| 你懂的视频一区二区| 国产美女一区二区| 99精品欧美一区| 噜噜噜在线观看免费视频日韩| 欧美国产日韩亚洲一区| 国产自产精品| 最新国产精品拍自在线播放| 欧美在线一级va免费观看| 欧美日韩视频在线| 136国产福利精品导航| 欧美一区午夜视频在线观看| 久久躁日日躁aaaaxxxx| 国产精品视频久久一区| 亚洲成在人线av| 久久精品国产69国产精品亚洲| 欧美国产激情| 国产亚洲激情在线| 午夜精品视频在线观看| 久久久不卡网国产精品一区|