亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

以jQuery中$.Deferred對象為例講解promise對象是如何處理異步問題

2019-11-20 11:16:56
字體:
來源:轉載
供稿:網友

Promises是一種令代碼異步行為更加優雅的抽象,它很有可能是JavaScript的下一個編程范式,一個Promise即表示任務結果,無論該任務是否完成。

在一些現代瀏覽器中已經提供了原生的Promise對象,其遵循Promise/A+標準。在jQuery1.5+,提供了$.Deferred(其可以被轉化為promise對象)。很多知名的框架中,也提供了promise對象。promise對象在javascript中已經是一種很重要的模式,它在解決異步問題時表現出的優雅,正是javascript所需要的。以下以jQuery中的$.Deferred對象為例,來看一下promise對象是如何處理異步問題。關于$.Deferred對象,可以到jQuery官網查看,這里就不贅述了。

一、封裝異步操作

  首先,我們以加載圖片為例,看以下代碼:

//加載圖片函數var loadImg = function(url){  var img = new Image() , deferred = $.Deferred() ; img.src = url ; img.onload = function(){  //成功則觸發deferred.resolve    deferred.resolve( this ) ; } ; img.onerror = function(e){    //失敗則觸發deferred.reject  deferred.reject( e ); } ;  //返回promise對象 return deferred.promise() ;} ;//請求圖片var request = loadImg('http://r2.ykimg.com/0515000054AFFC2D6737B343930AFAD6') ;//請求成功request.done(function(img){  //code}) ;//可以注冊多個回調,當請求成功時,會按注冊的順序執行,fail和always也有此性質request.done(function(img){  // code});//請求失敗request.fail(function(){  // code}) ;//請求完畢request.always(function(){  //code});

以上的代碼,我封裝了圖片加載的操作,將他們委托給$.Deferred,最后生成一個promise返回。使用這樣的方式,相比用對外暴露回調的方式,顯得更干凈、更清晰。這么做的另一個更重要的原因是,promise的連接。

二、promise的連接

  我們還是以上面圖片加載的代碼為例,來看一下如何做promise的連接,看以下代碼:

var request = loadImg('http://b1.hucdn.com/upload/item/1411/13/89613257775992_800x800.jpg') ;request.done(function(img){  //code}) ;//request連接別的promise之后返回的promisevar request3 = request.then(function(img){  //request執行成功時 連接request1  var request1 = loadImg('http://b1.hucdn.com/upload/item/1410/19/29492535741725_800x800.jpg') ;  return request1 ;},function(e){  //request執行失敗時 連接request2  var request2 = loadImg('http://b1.hucdn.com/upload/item/1410/19/29492535741725_800x800.jpg') ;  return request2 ;});//request執行并且request1或request2成功執行時request3.done(function(done){  //code}) ;

 promise對象提供了then的方法,它接受兩個回調:onResolve和onReject,在回調中返回promise,就可以完成promise之間的連接。通過這種方式,可以使異步操作串行的執行。

  同時,jQuery還提供了另外一種連接方式,看代碼:

var request = loadImg('http://b1.hucdn.com/upload/item/1412/23/48188827139381_800x800.jpg') ;var request1 = loadImg('http://b1.hucdn.com/upload/item/1412/06/50258594673502_800x800.jpg') ;//通過$.when連接promisevar request2 = $.when(request,request1) ;request2.done(function(img,img){  //code}) ;

  jQuery中提供了$.when這個函數,它可以接受n個promise對象為參數,它是將promise的執行結果連接在一起。使用這種方式,多個異步操作可以并行執行。

三、The End

  這里的代碼是以加載圖片為例,同樣的做法可以應用到其他的異步操作中去。比如jQuery中的$.ajax、$.fn.animate,調用它們返回的就是promise。在node端,也可以把一些異步操作(讀數據庫、讀文件等)封裝成promise。繼而對多個promise實現合并的操作,使其串行或者并行執行。

附:deferred對象

  deferred除了用于轉化promise對象外,本身也是個很有用的對象。它除了提供像promise對象的那些方法和屬性外,還有notify函數和progress函數,這兩個函數在實現進度條和瀑布流的時候,有很大的用處。

   在實現進度條時,resolve和done函數可以用于定義進度條讀取到100%時的觸發時機和觸發邏輯,notify和progress函數可以用于定義進度條在讀取中的觸發時機和觸發邏輯。reject和fail函數可以用于定義進度讀取失敗時的觸發時機和觸發邏輯。

   在實現瀑布流時,resolve和done函數可以用于定義當數據已經全部加載到頁面的觸發時機和觸發邏輯,notify和progress函數可以用于定義瀑布流讀取下一頁的觸發時機和觸發邏輯。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区中文字幕在线观看| 欧美激情一区二区三级高清视频| 成人久久18免费网站图片| 欧美日韩综合视频网址| 中文字幕在线观看亚洲| 日韩欧美成人精品| 亚洲伊人一本大道中文字幕| 亚洲女人天堂网| 91po在线观看91精品国产性色| 欧美日韩亚洲一区二区| 久久久久久亚洲精品不卡| 久久久www成人免费精品张筱雨| 欧美中文在线视频| 精品高清一区二区三区| 国产视频在线观看一区二区| 欧美电影免费在线观看| 欧美另类极品videosbestfree| 国产欧美在线视频| 国产精品日韩在线一区| 米奇精品一区二区三区在线观看| 国产精品女人久久久久久| 国产网站欧美日韩免费精品在线观看| 精品免费在线视频| 九九久久综合网站| 中文字幕免费国产精品| 亚洲一区美女视频在线观看免费| 久久免费视频在线观看| 性色av一区二区三区| 国产香蕉97碰碰久久人人| 亚洲福利视频久久| 91视频88av| 亚洲午夜精品视频| 国产一区二区视频在线观看| 国产精品三级在线| 中文字幕亚洲综合久久| 久久国产精品久久久久久久久久| 国产亚洲视频在线观看| 国产精品69精品一区二区三区| 亚洲人成电影网站色xx| 国产一区av在线| 日本精品在线视频| 久久精品影视伊人网| 欧美日韩国产色| 欧美成人午夜影院| 国产97在线|日韩| 欧美成人剧情片在线观看| 亚洲福利视频在线| 91精品国产成人www| 日韩av网址在线观看| 亚洲性无码av在线| 欧美激情伊人电影| 国产在线观看精品一区二区三区| 97超碰色婷婷| 日韩中文字幕在线看| 国产区精品视频| 国产91精品久久久| 久久精品国产69国产精品亚洲| 97色在线视频观看| 91精品久久久久久久久不口人| 日韩欧美在线网址| 国产精品视频专区| 国产免费一区二区三区在线能观看| 欧美激情中文字幕在线| 色偷偷88888欧美精品久久久| 狠狠色狠狠色综合日日小说| 欧美巨大黑人极品精男| 欧美黑人xxx| 国产精品高潮呻吟久久av无限| 国产精品久久久久免费a∨| 丝袜美腿亚洲一区二区| 久久综合伊人77777| 日韩a**站在线观看| 亚洲第一网站男人都懂| 福利二区91精品bt7086| 久久免费精品视频| 国产精品久久久久久久久久久久| 国产99视频精品免视看7| 国产在线精品成人一区二区三区| 精品毛片三在线观看| 国模精品系列视频| 亚洲区免费影片| 成人av.网址在线网站| 国a精品视频大全| 奇米成人av国产一区二区三区| 2019中文字幕在线| 亚洲人成人99网站| 欧美丝袜一区二区三区| 57pao国产精品一区| 日韩在线视频观看| 午夜精品美女自拍福到在线| 国内外成人免费激情在线视频| 97精品国产97久久久久久免费| 亚洲性夜色噜噜噜7777| 91精品国产91久久久久久吃药| 久久精品91久久久久久再现| 国产成+人+综合+亚洲欧洲| 欧美在线视频导航| 欧美精品免费播放| 2019中文在线观看| 久久精品久久久久久| 国产精品毛片a∨一区二区三区|国| 国产欧美精品一区二区三区-老狼| 欧美疯狂性受xxxxx另类| 亚洲第一精品久久忘忧草社区| 精品国偷自产在线视频99| 欧美日韩亚洲一区二区三区| 色www亚洲国产张柏芝| 美女av一区二区三区| 亚洲国产欧美日韩精品| 免费99精品国产自在在线| 热久久这里只有精品| 最近2019中文字幕第三页视频| 亚洲精品中文字幕女同| 成人妇女免费播放久久久| 欧美成人精品在线观看| 日韩在线播放av| 亚洲欧美日韩一区在线| 亚洲图片制服诱惑| 国产成人精品亚洲精品| 97在线精品国自产拍中文| 国产成人在线一区| 秋霞av国产精品一区| 91亚洲国产精品| 韩国v欧美v日本v亚洲| 成人欧美在线视频| 国产ts人妖一区二区三区| 国产精品户外野外| 国产亚洲欧洲黄色| 综合激情国产一区| 国产精品久久久久久久久久久久| 日韩亚洲精品视频| 欧美另类xxx| 亚洲影院色无极综合| 久久99久久99精品中文字幕| 国产精品99久久久久久www| 97成人超碰免| 亚洲专区在线视频| 国产精品麻豆va在线播放| 韩国三级日本三级少妇99| 欧美日韩中文字幕| 亚洲精品中文字幕女同| 欧美黑人性猛交| 亚洲天堂av在线免费观看| 欧美极品在线播放| 亚洲日本中文字幕免费在线不卡| 国产精品入口日韩视频大尺度| 九九九久久久久久| 欧美精品一本久久男人的天堂| 欧美激情免费观看| 欧美精品生活片| 国产精品视频专区| 亚洲色图激情小说| 亚洲色图五月天| 日韩免费不卡av| 伊人一区二区三区久久精品| 88xx成人精品| 亚洲日韩欧美视频一区| 亚洲一区二区精品| 欧美韩日一区二区| 在线精品高清中文字幕| 欧美一区第一页| 夜夜嗨av色综合久久久综合网| 91久久久久久久一区二区| 久久伊人免费视频|