小程序关于请求同步的总结.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
⼩程序关于请求同步的总结 在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和留⾔内容后全部发给服务端,服务端开启⼀个新的线程去处理这些业务逻 辑,主线程直接返回⽤户留⾔成功的提⽰ (这⾥不考虑新线程执⾏失败的情况)。 ⽅案⼆和⽅案三功能上是相同的,但是代码的展⽰上可能⽅案三更加好⼀些。看下⾯的代码(其中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){

文档评论(0)

139****1921 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档