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

如何利用Promises編寫更優(yōu)雅的JavaScript代碼
來源:易賢網(wǎng) 閱讀:1410 次 日期:2016-06-27 15:55:24
溫馨提示:易賢網(wǎng)小編為您整理了“如何利用Promises編寫更優(yōu)雅的JavaScript代碼”,方便廣大網(wǎng)友查閱!

如何利用Promises編寫更優(yōu)雅的JavaScript代碼?下面小編就為大家?guī)硪黄肞romises編寫更優(yōu)雅的JavaScript代碼。希望對大家有所幫助。

你可能已經(jīng)無意中聽說過 Promises,很多人都在討論它,使用它,但你不知道為什么它們?nèi)绱颂貏e。難道你不能使用回調(diào)么?有什么了特別的?在本文中,我們一起來看看 Promises 是什么以及如何使用它們寫出更優(yōu)雅的 JavaScript 代碼。

Promises 易于閱讀

比如說我們想從 HipsterJesus 的API中抓取一些數(shù)據(jù)并將這些數(shù)據(jù)添加到我們的頁面中。這些 API 的響應(yīng)數(shù)據(jù)形式如下:

 "text": "<p>Lorem ipsum...</p>", 

 "params": { 

 "paras": 4, 

 "type": "hipster-latin"

}} 

要使用回調(diào)的話,我們通常要寫如下形式的東西:

$.getJSON('http://hipsterjesus.com/api/', function(data) { 

 $('body').append(data.text); 

}); 

如果你有 jQuery 的使用經(jīng)歷,你會(huì)認(rèn)出我們創(chuàng)建了一個(gè) GET 請求并且希望響應(yīng)內(nèi)容是 JSON。我們還傳遞了一個(gè)回調(diào)函數(shù)來接受響應(yīng)的 JSON,以將數(shù)據(jù)添加到文檔中。

另外一種書寫方法是使用 getJSON 方法返回的 promise 對象。你可以直接在這個(gè)返回對象上綁定一個(gè)回調(diào)。

var promise = $.getJSON('http://hipsterjesus.com/api/');promise.done(function(data) { 

 $('body').append(data.text); 

}); 

在上面的回調(diào)例子中,當(dāng)響應(yīng)成功時(shí)它將 API 請求的結(jié)果添加到文檔中。但當(dāng)響應(yīng)失敗是會(huì)發(fā)生什么呢?我們可以在我們的 promise 上綁定一個(gè)失敗處理器。

var promise = $.getJSON('http://hipsterjesus.com/api/');promise.done(function(data) { 

 $('body').append(data.text);});promise.fail(function() { 

 $('body').append('<p>Oh no, something went wrong!</p>'); 

}); 

大多數(shù)人刪掉了 promise 變量,這樣更簡潔,一眼就能看出代碼的作用。

$.getJSON('http://hipsterjesus.com/api/').done(function(data) { 

 $('body').append(data.text);}).fail(function() { 

 $('body').append('<p>Oh no, something went wrong!</p>'); 

}); 

jQuery 也包含一個(gè)一直發(fā)生的事件處理器,不論請求成功失敗都會(huì)被調(diào)用。

$.getJSON('http://hipsterjesus.com/api/').done(function(data) { 

 $('body').append(data.text);}).fail(function() { 

 $('body').append('<p>Oh no, something went wrong!</p>');}).always(function() { 

 $('body').append('<p>I promise this will always be added!.</p>'); 

}); 

通過使用promise,回調(diào)的順序是按預(yù)期的。我們能確保正常回調(diào)先被調(diào)用,然后是失敗回調(diào),最后是一直發(fā)生的回調(diào)。

更好的 API

比如說我們想創(chuàng)造一個(gè) HipsterJesus API 的封裝對象。我們會(huì)添加一個(gè)方法——html,它將來自 API 的 HTML 數(shù)據(jù)返回。與之前設(shè)置一個(gè)回調(diào)處理器來解析請求不同,我們可以讓方法返回一個(gè) promise 對象。

var hipsterJesus = { 

 html: function() { 

  return $.getJSON('http://hipsterjesus.com/api/').then(function(data) { 

   return data.text; 

  }); 

}}; 

這個(gè)做法很酷,這樣我們可以繞過 promise 對象而不必?fù)?dān)心何時(shí)或如何解析它的值。任何需要 promise 返回值的代碼只需注冊一個(gè)成功響應(yīng)回調(diào)即可。

then方法允許我們修改promise的結(jié)果并將其傳遞給鏈中的下一個(gè)處理器。這意味現(xiàn)在我們可以這樣使用新的API:

hipsterJesus.html().done(function(html) { 

 $("body").append(html); 

}); 

直到最近,AngularJS 出現(xiàn)了一個(gè)殺手級(jí)特性,模板可以直接綁定到promise。在Angular的控制器中,像這樣:

$scope.hipsterIpsum = $http.get('http://hipsterjesus.com/api/'); 

這樣,在模板中寫 {{ hipsterIpsum.text }} 就很簡單了。當(dāng) promise 解析后,Angular 不需要自動(dòng)更新視圖。不幸的是 Angular 團(tuán)隊(duì)已經(jīng)放棄了這一特性?,F(xiàn)在,它可以通過調(diào)用 $parseProvider.unwrapPromises(true) 來啟用。我希望Angular已經(jīng)其他框架一直包含此特性(我會(huì)一直留意)。

鏈?zhǔn)秸{(diào)用

Promise 最出彩的部分是你可以將它們串聯(lián)起來。比如說我們想添加一個(gè)方法到一個(gè)返回一段數(shù)組的 API。

var hipsterJesus = { 

 html: function() { 

  return $.getJSON('http://hipsterjesus.com/api/').then(function(data) { 

   return data.text; 

  }); 

 }, 

 paragraphs: function() { 

  return this.html().then(function(html) { 

   return html.replace(/<[^>]+>/g, "").split(""); 

  }); 

 }}; 

我們以上面的方式這種 HTML 方法,我們用它在 paragraphs 方法中。因?yàn)閜romise回調(diào)函數(shù)的返回值將傳遞給鏈中的下一個(gè)回調(diào),我們能夠在通過它們時(shí)自由地創(chuàng)建小的、功能性的方法來改變數(shù)據(jù)。

我們可以按需求任意次串聯(lián)promise。讓我們添加一個(gè)。

var hipsterJesus = { 

 html: function() { 

  return $.getJSON('http://hipsterjesus.com/api/').then(function(data) { 

   return data.text; 

  }); 

 }, 

 paragraphs: function() { 

  return this.html().then(function(html) { 

   return html.replace(/<[^>]+>/g, "").split(""); 

  }); 

 }, 

 sentences: function() { 

  return this.paragraphs().then(function(paragraphs) { 

   return [].concat.apply([], paragraphs.map(function(paragraph) { 

    return paragraph.split(/. /); 

   })); 

  }); 

 }};  

多個(gè)調(diào)用

可能 promise 最顯著的特點(diǎn)是調(diào)用多個(gè) API 的能力。當(dāng)使用回調(diào)時(shí),如果你需要同時(shí)創(chuàng)建兩個(gè)API調(diào)用時(shí)會(huì)發(fā)生什么呢?你可能會(huì)這樣寫:

var firstData = null;var secondData = null;var responseCallback = function() { 

 if (!firstData || !secondData) 

  return; 

 // do something}$.get("http://example.com/first", function(data) { 

 firstData = data; 

 responseCallback();});$.get("http://example.com/second", function(data) { 

 secondData = data; 

 responseCallback(); 

}); 

使用 promise 的話,這就簡單多了:

var firstPromise = $.get("http://example.com/first"); 

var secondPromise = $.get("http://example.com/second"); 

$.when(firstPromise, secondPromise).done(function(firstData, secondData) { 

 // do something 

}); 

這里我們使用 when 方法,將其綁定到一個(gè)供兩個(gè)請求都完成時(shí)調(diào)用的處理器上。

結(jié)論

這就是 Promise。希望你馬上就想到一些可以用 Promise 實(shí)現(xiàn)的的可怕的事情。你最喜歡使用它們的方式是什么?在評(píng)論中告訴我吧!

*注:為簡單起見,本文使用了jQuery的延期執(zhí)行。jQuery 的 Deferred對象 和 Promises/A+的規(guī)范 間有細(xì)微的差別,這個(gè)規(guī)范更標(biāo)準(zhǔn)。

以上這篇如何利用Promises編寫更優(yōu)雅的JavaScript代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:如何利用Promises編寫更優(yōu)雅的JavaScript代碼
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美日本韩国一区二区三区| 亚洲激情啪啪| 亚洲欧美国产精品va在线观看| 激情视频一区二区| 国产女优一区| 国产精品激情偷乱一区二区∴| 欧美freesex8一10精品| 久久久综合精品| 久久久在线视频| 久久久午夜精品| 久久精品系列| 欧美在线亚洲一区| 欧美亚洲综合在线| 欧美在线观看视频| 欧美一区二区三区视频在线| 午夜欧美大尺度福利影院在线看| 亚洲欧美日韩一区二区三区在线观看 | 国产视频一区在线| 国产精品午夜av在线| 国产精品实拍| 国产亚洲欧洲一区高清在线观看| 国产午夜精品全部视频播放 | 久久精品三级| 久久久噜噜噜久久中文字幕色伊伊 | 欧美特黄视频| 国产精品久久久久久模特| 国产精品高潮粉嫩av| 国产精品在线看| 国内自拍视频一区二区三区| 在线看片日韩| 在线中文字幕日韩| 欧美亚洲网站| 免费欧美日韩国产三级电影| 欧美日韩国产一中文字不卡| 国产精品你懂得| 1000部国产精品成人观看| 亚洲精品欧美专区| 亚洲欧美www| 久久五月激情| 欧美日韩精品福利| 国产视频一区二区在线观看 | 欧美成黄导航| 国产精品久久久久9999| 国产一区免费视频| 99视频国产精品免费观看| 性欧美大战久久久久久久久| 老司机亚洲精品| 国产精品久久久一区二区三区| 国产一区二区三区久久久久久久久 | 久久国产精品网站| 欧美伦理影院| 黄色日韩在线| 亚洲一区二区在线看| 久久在线免费视频| 国产精品欧美一区二区三区奶水| 黄色国产精品| 亚洲女人av| 欧美区一区二| 国产性天天综合网| 亚洲一区二区三区高清不卡| 欧美v国产在线一区二区三区| 国产精品亚洲аv天堂网 | 欧美日韩国产片| 韩国女主播一区二区三区| 一本久久知道综合久久| 久久嫩草精品久久久精品一| 国产精品免费一区二区三区观看| 亚洲青涩在线| 美乳少妇欧美精品| 国产在线精品一区二区夜色| 亚洲影音先锋| 欧美日韩久久精品| 亚洲激情网址| 蜜月aⅴ免费一区二区三区| 国产亚洲精品久| 午夜精品剧场| 国产精品久久久久毛片大屁完整版 | 欧美mv日韩mv国产网站app| 国产视频一区在线| 亚洲自拍偷拍色片视频| 欧美激情一区二区三区在线| 亚洲大胆av| 麻豆久久婷婷| 亚洲国产老妈| 欧美成人视屏| 亚洲东热激情| 美女福利精品视频| 在线成人av网站| 久久精品国产77777蜜臀| 国产欧美日韩亚洲精品| 亚洲欧美在线一区二区| 国产精品毛片高清在线完整版| 一本久久知道综合久久| 欧美日韩三区| 正在播放欧美一区| 欧美午夜精品久久久| 在线视频日本亚洲性| 欧美日韩中文在线| 亚洲自啪免费| 国产欧美一区二区精品性| 香蕉久久夜色精品国产使用方法| 国产精品美女一区二区| 午夜国产精品视频| 国产综合网站| 欧美jizz19性欧美| 一本久道综合久久精品| 国产精品免费视频xxxx| 久久精品观看| 亚洲乱码久久| 国产精品久久精品日日| 欧美一级在线播放| 亚洲国产高清一区| 欧美日韩亚洲国产精品| 亚洲综合色自拍一区| 狠狠干综合网| 欧美日韩精品一区| 欧美一区日韩一区| 亚洲国产一区二区三区高清| 欧美日韩精品系列| 欧美影院在线| 亚洲三级视频| 国产精品视频网| 美女爽到呻吟久久久久| 一区二区三区日韩精品| 国产色产综合产在线视频| 久久综合色天天久久综合图片| 亚洲精品国产精品久久清纯直播| 国产精品美女主播在线观看纯欲| 久久久999精品| 制服丝袜激情欧洲亚洲| 激情欧美丁香| 国产精品theporn| 裸体素人女欧美日韩| 亚洲自拍偷拍色片视频| 亚洲电影激情视频网站| 国产精品入口尤物| 农村妇女精品| 欧美制服丝袜| 在线视频日本亚洲性| 在线观看视频一区二区| 国产精品久久久久久福利一牛影视| 久久久亚洲国产天美传媒修理工| 一区二区三区国产在线| 在线成人免费观看| 国产精品综合不卡av| 欧美日本亚洲| 欧美成人精品在线观看| 久久久精品国产免大香伊| 亚洲午夜伦理| 一级日韩一区在线观看| 亚洲国产精品久久久久婷婷老年| 国产欧美日韩91| 欧美日精品一区视频| 欧美激情精品久久久久久大尺度| 久久久久成人精品免费播放动漫| 亚洲欧美日韩视频一区| 亚洲一区三区在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 好吊色欧美一区二区三区四区| 国产精品永久免费视频| 欧美性淫爽ww久久久久无| 欧美人与性动交cc0o| 美女视频黄 久久| 久久国产66| 性欧美videos另类喷潮| 亚洲主播在线观看| 亚洲一区二区三区免费视频| 一区二区三区四区五区视频| a4yy欧美一区二区三区| 日韩亚洲一区二区| 99国产精品视频免费观看| 日韩视频在线一区二区| 一本大道久久精品懂色aⅴ| 日韩一级在线观看| 一区二区免费在线播放| 在线亚洲一区观看| 亚洲视频碰碰| 午夜视黄欧洲亚洲| 欧美一区二区三区精品| 久久国产精品99精品国产| 久久久久国产一区二区| 美女图片一区二区| 欧美精品国产精品日韩精品| 欧美日韩免费观看一区| 国产精品久久久久久久久久久久久| 国产精品美女在线观看| 国产亚洲精久久久久久| 一区免费在线| 亚洲精品一区二区三区福利| av成人免费| 欧美一级视频精品观看| 久久久久久久久久久久久女国产乱| 久久另类ts人妖一区二区| 欧美顶级少妇做爰| 国产精品久久9| 国内精品福利| 日韩天堂在线观看| 小辣椒精品导航| 快播亚洲色图| 欧美日韩少妇|