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

首頁 > 課堂 > 小程序 > 正文

小程序關于請求同步的總結

2020-03-21 15:57:58
字體:
來源:轉載
供稿:網友

在JavaScript中,提供了一些異步特性,因為同步操作會對程序的執行進行阻塞處理。比如在瀏覽器頁面程序中,如果一段同步的代碼需要執行很長時間(比如一個很大的循環操作),則頁面會產生卡死的現象。

異步為程序提供了性能和體驗上的益處,比如可以將代碼放到setTimeout()中執行;或者在網頁中,我們使用Ajax的方式向服務器端做異步數據請求。這些異步的代碼不會阻塞當前的界面主進程,界面還是可以靈活的進行操作,等到異步代碼執行完成,再做相應的處理。

舉一個例子:在小程序中,我們獲取到后臺的數據使用時間往往是不定的,這個時候:即使你在前面寫的代碼,也可能會在后面執行。

function getAccountInfo(callback, errorCallback) { wx.request({ url: '/accounts/12345', success: function (res) {  console("1") }, fail: function (res) {  //...  errorCallback(data); } });console.log("2")}

也就是存在2輸出在1前面的可能。這種策略提升頁面加載速度。能很好的提高用戶體驗感。

但是請看下面的情景:

小程序是提倡不獲取用戶信息就能使用的,但是在特定的情況下我們必須要拿到用戶的一些數據,比如名稱,圖像鏈接等等。在這種情況下,我們首先獲取用戶的code,根據code去后臺獲取用戶的openid或者unionid。拿到這些數據之后我們才能確定用戶的身份,然后再去發新的請求(這些請求往往是需要用戶身份憑證的,比如Token)。

上面的敘述中,我們發了三次請求,第一次獲取code,第二次獲取openID或unionid,第三次根據身份信息執行新的請求。我們都知道JS中的請求都是異步執行的,有可能微信服務端的code還沒返回,用戶已經去執行一些需要權限的操作,這就會導致請求失敗。那么小程序該如何解決這種問題呢?這里提供三種方案以供參考:

1.服務端一次請求全部處理。(使用范圍太小)

2.客戶端在請求成功的回調中,再次發送請求。(可用,但是代碼會很冗長且不容易維護)

3.使用Promise

方案一中:比如用戶留言功能,我們拿到code和留言內容后全部發給服務端,服務端開啟一個新的線程去處理這些業務邏輯,主線程直接返回用戶留言成功的提示(這里不考慮新線程執行失敗的情況)。

方案二和方案三功能上是相同的,但是代碼的展示上可能方案三更加好一些??聪旅娴拇a(其中postReq和getReq是自己封裝的請求方法):

var http = require('request.js')function userLogin(name, image, gender, content, artilceId){ //獲取code var promise = new Promise(function(resolve,reject){ wx.login({  success: res => {  resolve(res.code);  } }) }) //獲取用戶身份憑證 var pm2 = promise.then(function(res){ return new Promise(function (resolve, reject){  http.postReq("user/getUserInfo", { "code": res, "type": 1, "name": name, "image": image, "gender": gender }, function (res) {  // console.log(res)  if (res.data == "") {   wx.showModal({   title: '提示',   content: '授權失敗,請重試',   })   return;  }  resolve(res);  }) }) },function(res){  }) //發表評論 pm2.then(function(res){ // console.log(res.data+":"+content) http.postReq("user/comment", { "content": content, "openId": res.data, "artilceId": artilceId},function(res){  // console.log(res)  if(res.data ){  wx.getStorage({   key: 'showInfo',   success: function(res) {   console.log(res.data )   if(res.data != false){    wx.showModal({    title: '提示',    content: '為了維護每天學Java的學習氛圍,我們已發郵件提醒管理員對評論進行審核,通過后即可展示您的評論。',    })   }   },fail:function(res){   wx.setStorage({    key: 'showInfo',    data: false,   })   wx.showModal({    title: '提示',    content: '為了維護每天學Java的學習氛圍,我們已發郵件提醒管理員對評論進行審核,通過后即可展示您的評論。',   })   }  })   }   }) }, function(res){  })} module.exports = { userLogin: userLogin}

 這里使用的就是Promise?對于Promise如何使用我們稍后再說,初學階段我們可能會這樣保證同步:

 app.postReq("/homework/getHomeWorkLike",{"name":name},function(res){  app.postReq("/homework/getHomeWorkLike",{"name":name},function(res){   app.postReq("/homework/getHomeWorkLike",{"name":name},function(res){       }     })    }   })  } })

在每次返回成功的回調中執行新的請求,但是當我們處理的業務邏輯過多時候,就會顯得很難看。因為不直觀,所以不方便我們排查一些錯誤。所以推薦大家使用Promise。

Promise :

Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。

所謂Promise,簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果。從語法上說,Promise 是一個對象,從它可以獲取異步操作的消息。Promise 提供統一的 API,各種異步操作都可以用同樣的方法進行處理。

Promise對象有以下兩個特點。

(1)對象的狀態不受外界影響。Promise對象代表一個異步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失?。?。只有異步操作的結果,可以決定當前是哪一種狀態,任何其他操作都無法改變這個狀態。這也是Promise這個名字的由來,它的英語意思就是“承諾”,表示其他手段無法改變。

(2)一旦狀態改變,就不會再變,任何時候都可以得到這個結果。Promise對象的狀態改變,只有兩種可能:從pending變為fulfilled和從pending變為rejected。只要這兩種情況發生,狀態就凝固了,不會再變了,會一直保持這個結果,這時就稱為 resolved(已定型)。如果改變已經發生了,你再對Promise對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監聽,是得不到結果的。

注意,為了行文方便,本章后面的resolved統一只指fulfilled狀態,不包含rejected狀態。

有了Promise對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操作更加容易。

Promise也有一些缺點。首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處于pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。

如果某些事件不斷地反復發生,一般來說,使用 Stream 模式是比部署Promise更好的選擇。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产福利精品在线| 亚洲女人天堂成人av在线| 黄网站色欧美视频| 国产精品96久久久久久又黄又硬| 黄色成人av网| 日韩av最新在线观看| 91色在线观看| 欧美成在线视频| 91色p视频在线| 91网在线免费观看| 久久久久久久亚洲精品| 欧洲成人免费aa| 欧美性生交xxxxxdddd| 久热在线中文字幕色999舞| 亚洲欧美日韩在线一区| 日韩免费av一区二区| 亚洲精品动漫久久久久| 美女福利视频一区| 国产99久久精品一区二区永久免费| 国产精品网站入口| 欧美日韩国产成人在线观看| 国产69精品久久久| 亚洲精品日韩av| 亚洲韩国欧洲国产日产av| 国自产精品手机在线观看视频| 91精品国产91久久久久久久久| 国产精品www色诱视频| 日韩在线欧美在线| 亚洲人午夜精品| www.亚洲男人天堂| 日韩成人网免费视频| 欧美精品在线观看| 日韩欧美高清视频| 亚洲精品视频在线观看视频| 91精品综合久久久久久五月天| 日韩一区二区三区在线播放| 米奇精品一区二区三区在线观看| 国产精品网红福利| 国产精品人成电影在线观看| 中文字幕亚洲欧美| 午夜精品福利在线观看| 亚洲第一视频在线观看| 亚洲男人天堂2019| 在线观看视频亚洲| 中文国产成人精品| 日韩在线不卡视频| 98视频在线噜噜噜国产| 国产精品久久久久一区二区| 久久视频国产精品免费视频在线| 性欧美xxxx| 欧美日本啪啪无遮挡网站| 亚洲精品电影在线| www.欧美视频| 亚洲欧美日韩在线高清直播| 亚洲天堂男人的天堂| 成人av番号网| 亚洲一区亚洲二区| 亚洲国产天堂久久综合网| …久久精品99久久香蕉国产| 国产精品爽黄69天堂a| 久久国产精品99国产精| 亚洲视频视频在线| 国产精品男人爽免费视频1| 亚洲人成在线观看网站高清| 91久久久久久国产精品| 亚洲a在线播放| 91久久精品美女高潮| 日韩在线国产精品| 久久国产精品久久久久久久久久| 国产欧美日韩综合精品| 欧美国产激情18| 国产不卡视频在线| xxx成人少妇69| 97精品国产97久久久久久免费| 日韩视频精品在线| 亚洲精美色品网站| 亚洲国产一区二区三区在线观看| 日韩高清电影免费观看完整| 亚洲色图欧美制服丝袜另类第一页| 91高清在线免费观看| 成人亚洲欧美一区二区三区| 97久久精品视频| 欧美日韩免费区域视频在线观看| 国产精品日日做人人爱| 国产精品精品国产| 美女扒开尿口让男人操亚洲视频网站| 91精品中文在线| 日韩中文字幕免费看| 欧美电影在线观看完整版| 欧美日韩精品在线播放| 欧美亚洲一区在线| 日韩在线观看免费网站| 久久精品精品电影网| 在线观看视频亚洲| 中文日韩在线观看| 久久免费视频在线观看| 久久久久久久国产精品视频| 萌白酱国产一区二区| 日韩电影中文字幕在线| 一区二区三区四区精品| 国产精品一区av| 欧美另类暴力丝袜| 久99久在线视频| 热久久这里只有| 成人国产精品久久久久久亚洲| 欧美自拍视频在线观看| 亚洲精品视频免费| 色综合影院在线| 欧美超级免费视 在线| 亚洲伊人成综合成人网| 1769国产精品| 九九久久综合网站| 日韩免费高清在线观看| 91精品在线观| 久久黄色av网站| 国产精品中文字幕久久久| 国产精品第二页| 欧美性高潮床叫视频| 伊人伊成久久人综合网小说| 亚洲第一级黄色片| 中文字幕亚洲激情| 中文字幕不卡在线视频极品| 色久欧美在线视频观看| 亚洲天堂免费在线| 97成人精品区在线播放| 欧美在线一级视频| 亚洲福利在线观看| 日韩av综合网| 亚洲国产精品国自产拍av秋霞| 久久久噜久噜久久综合| 青青草99啪国产免费| 亚洲精品福利资源站| 亚洲福利视频久久| 成人国内精品久久久久一区| 日韩精品免费在线视频观看| 4438全国亚洲精品在线观看视频| 亚洲成人aaa| 91精品国产综合久久香蕉的用户体验| 日韩av影视在线| 国精产品一区一区三区有限在线| 久久久久久久久久久网站| 亲子乱一区二区三区电影| 欧美三级免费观看| 中文字幕精品网| 久久福利视频网| 国产丝袜一区二区三区免费视频| 久久久久久久爱| 91在线观看免费| 中文字幕在线亚洲| 欧美片一区二区三区| 亚洲美女在线视频| 美女久久久久久久| 国产丝袜视频一区| 国产综合香蕉五月婷在线| 亚洲一区二区久久久| 国内精品视频久久| 成人午夜小视频| 超碰97人人做人人爱少妇| 日韩美女av在线免费观看| 久久精品中文字幕电影| 国产在线观看精品一区二区三区| 中文字幕欧美国内| 亚洲国模精品私拍| 久久精品国产视频|