摘要:情景再現(xiàn)以前用寫(xiě)后端程序時(shí),遇到這個(gè)概念,這個(gè)東西好呀不用謝一層一層回調(diào),直接用類似于的連綴方式。后來(lái)遇到這個(gè)庫(kù),它就是庫(kù)中很有名的。我希望可以把用在前端的請(qǐng)求上,但是我不想又引入。后來(lái)發(fā)現(xiàn),本身就具有類似于的東西。
1 情景再現(xiàn)
以前用nodejs寫(xiě)后端程序時(shí),遇到Promise這個(gè)概念,這個(gè)東西好呀!不用謝一層一層回調(diào),直接用類似于jQuery的連綴方式。后來(lái)遇到bluebird這個(gè)庫(kù),它就是Promise庫(kù)中很有名的。我希望可以把Promise用在前端的ajax請(qǐng)求上,但是我不想又引入bluebird。后來(lái)發(fā)現(xiàn),jquery本身就具有類似于Promise的東西。于是我就jquery的Promise寫(xiě)一些異步請(qǐng)求。
2 不堪回首看看一看我以前寫(xiě)異步請(qǐng)求的方式
// 函數(shù)定義 function sendRequest(req,successCallback,errorCallback){ $.ajax({ ... ... success:function(res){ successCallback(res); }, error:function(res){ errorCallback(res); } }); } // 函數(shù)調(diào)用,這個(gè)函數(shù)的匿名函數(shù)寫(xiě)的時(shí)候很容易出錯(cuò),而且有時(shí)候難以理解 sendRequest(req,function(res){ //請(qǐng)求成功 ... },function(res){ //請(qǐng)求失敗 ... });3 面朝大海
下面是我希望的異步調(diào)用方式
sendRequest(req) .done(function(res){ //請(qǐng)求成功 ... }) .fail(function(req){ //請(qǐng)求失敗 ... });4 廢話少說(shuō),放‘碼’過(guò)來(lái)
talk is cheap, show me the code
// 最底層的發(fā)送異步請(qǐng)求,做成Promise的形式 App.addMethod("_sendRequest",function(path,method,payload){ var dfd = $.Deferred(); $.ajax({ url:path, type:method || "get", headers:{ sessionId:session.id || "" }, data:JSON.stringify(payload), dataType:"json", contentType : "application/json; charset=UTF-8", success:function(data){ dfd.resolve(data); }, error:function(data){ dfd.reject(data); } }); return dfd.promise(); }); //根據(jù)callId查詢錄音文件,不僅僅是異步請(qǐng)求可以做成Promise形式,任何函數(shù)都可以做成Promise形式 App.addMethod("_getRecordingsByCallId",function(callId){ var dfd = $.Deferred(), path = "/api/tenantcalls/"+callId+"/recordings"; App._sendRequest(path) .done(function(res){dfd.resolve(res);}) .fail(function(res){dfd.reject(res);}); return dfd.promise(); }); // 獲取錄音 App.addMethod("getCallDetailRecordings",function(callId){ App._getRecordingsByCallId(callId) .done(function(res){ // 獲取結(jié)果后渲染數(shù)據(jù) App.renderRecording(res); }) .fail(function(res){ App.error(res); }); });5 注意事項(xiàng)
jQuery的Promise主要是用了jQquery的$.Derferred()方法,一些老版本的jquery并不支持此方法。
jQuery版本必須大于等于1.5,推薦使用1.11.3
6 參考文獻(xiàn)jquery官方api文檔
jquery維基百科文檔
7 最后以上文章僅供參考,不包完全正確。歡迎評(píng)論,3q。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/91074.html
摘要:和和都有和,但是略有不同。實(shí)際上返回的是一個(gè)對(duì)象。和添加的回調(diào),添加的回調(diào)。所以在調(diào)用成功的情況下執(zhí)行添加的回調(diào),調(diào)用失敗時(shí)執(zhí)行添加的回調(diào)。,產(chǎn)生對(duì)象并,產(chǎn)生對(duì)象并,然后繼續(xù)處理,的語(yǔ)法糖,和的差不多但不同。 Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同。不過(guò)它們的作用可以簡(jiǎn)單的用兩句話來(lái)描述 Deffere...
摘要:三和對(duì)象方法對(duì)象其實(shí)就是對(duì)象的特例,因?yàn)閷?duì)象不能更改異步狀態(tài),而對(duì)象可以。方法依次接受三個(gè)回調(diào),分別為對(duì)象后觸發(fā)的回調(diào),返回一個(gè)對(duì)象。注意,必須傳入函數(shù),而該函數(shù)只有返回一個(gè)對(duì)象,才能夠讓異步事件按照預(yù)期順序來(lái)執(zhí)行。對(duì)象的方法對(duì)象和對(duì)象 一、前言 為了讓前端們從回調(diào)的地獄中回到天堂,jQuery也引入了Promise的概念。Promise是一種令代碼異步行為更加優(yōu)雅的抽象,有了它,我...
摘要:回調(diào)隊(duì)列對(duì)象,用于構(gòu)建易于操作的回調(diào)函數(shù)集合,在操作完成后進(jìn)行執(zhí)行。對(duì)象對(duì)象,用于管理回調(diào)函數(shù)的多用途列表。如果傳入一個(gè)延遲對(duì)象,則返回該對(duì)象的對(duì)象,可以繼續(xù)綁定其余回調(diào),在執(zhí)行結(jié)束狀態(tài)之后也同時(shí)調(diào)用其回調(diào)函數(shù)。 在工作中我們可能會(huì)把jQuery選擇做自己項(xiàng)目的基礎(chǔ)庫(kù),因?yàn)槠涮峁┝撕?jiǎn)便的DOM選擇器以及封裝了很多實(shí)用的方法,比如$.ajax(),它使得我們不用操作xhr和xdr對(duì)象,直...
摘要:我們稱為回調(diào)對(duì)象,它內(nèi)部會(huì)維護(hù)一個(gè)數(shù)組,我們可以向其中添加若干個(gè)回調(diào)函數(shù),然后在某一條件下觸發(fā)執(zhí)行。第一次之后,再次新的回調(diào)函數(shù)時(shí),自動(dòng)執(zhí)行回調(diào)。當(dāng)前面的回調(diào)函數(shù)返回時(shí),終止后面的回調(diào)繼續(xù)執(zhí)行。 最近懶癌發(fā)作,說(shuō)好的系列文章,寫(xiě)了一半,一直懶得寫(xiě),今天補(bǔ)上一篇。 Deferred 我們?cè)谑褂胮romise對(duì)象時(shí),總會(huì)提到一個(gè)與它關(guān)系密切的對(duì)象——Deferred。其實(shí)Deferred沒(méi)...
摘要:使用的好處有以下幾點(diǎn)你可以多次調(diào)用和函數(shù),并使用不同的回調(diào)函數(shù)。或許你的一個(gè)回調(diào)函數(shù)用來(lái)停止動(dòng)畫(huà),一個(gè)用來(lái)發(fā)起一個(gè)新的請(qǐng)求,一個(gè)用來(lái)將接受到的數(shù)據(jù)展示給用戶。即使在調(diào)用完成之后,你依然可以調(diào)用和函數(shù),并且回調(diào)函數(shù)可以立即執(zhí)行。 Deferred和Promise之間有什么區(qū)別呢? promise 一個(gè)promise就是一個(gè)由異步函數(shù)返回的對(duì)象。當(dāng)你想要自己編寫(xiě)一個(gè)這樣的函數(shù)時(shí)你需要使用一...
閱讀 3301·2021-11-10 11:36
閱讀 3272·2021-11-02 14:39
閱讀 1882·2021-09-26 10:11
閱讀 5331·2021-09-22 15:57
閱讀 1790·2021-09-09 11:36
閱讀 2156·2019-08-30 12:56
閱讀 3582·2019-08-30 11:17
閱讀 1842·2019-08-29 17:17