1.小程序请求的封装写过小程序的应该都知道,微信请求不封装基本是不能用的,写的太冗长,而且是回调式的,回调地狱就更不用说了,可读性差。下面是我封装的代码,顺便支持一下promise。functionbaseRequest({url,method,header,data,complete},resolve,reject){wx.request({url,method,header,data,success:function(res){//需要判断服务端代码使用thissection//我们的服务器返回0表示真正成功,其他代码表示各种错误代码//if(res.data.code===0){//resolve(res)//}else{//reject(res)//}resolve(res)},失败:function(res){reject(res)},complete:function(res){complete(res)}})}functionrequestPromise(options){letreq=newPromise((resolve,reject)=>{baseRequest(options,resolve,reject)})returnreq}functionget(options){options.method='GET'returnrequestPromise(options)}functionpost(options){options.method='POST'if(!options.header){options.header={}}options.header["Content-Type"]="application/x-www-form-urlencoded"returnrequestPromise(options)}functionput(options){选项。method='PUT'if(!options.header){options.header={}}options.header["Content-Type"]="application/x-www-form-urlencoded"returnrequestPromise(options)}module.exports={get,post,put}使用方法:1.把上面的代码写成一个单独的文件,我的是network.js2。然后将其绑定到全局wx对象。wx。Network=require('./network.js').(在app.js中绑定)3.例子如下wx.Network.get({url:'xxx.xxx.xxx',//请求路径data:{a:"a"//参数列表}}).then(res=>{console.log("requestsucceeded")}).catch(res=>{console.log("requestfailed")})2.登录锁基本请求封装后,还有一些特殊需求,比如1.我会在首页登录,登录后得到一个token,然后我用这个token去请求其他需要token的接口(比如个人购物信息)2.这个时候,一种方式是完成登录之前没有request需要token,有mask拦截操作(登录...)3.对于我父亲来说,这种方式有一个致命的缺点,就是在高并发的情况下,服务器的压力非常大,返回前首页的登录界面很慢(进入首页后会自动登录)。这时候用户看到的界面正在loading,可能需要很长时间。如果用户对你的产品没有粘性,最多4.为了优化这种情况下的用户体验,我们完全取消了登录的加载,取而代之的是“登录锁”的形式。6.即如果请求需要token,先判断是否有登录。如果不是,则启动定时器一段时间(200ms),然后再判断。如果您已登录,请发送请求。如果没有,重复上述操作并添加登录锁后的代码如下:(新增了一个wait函数,调用get、post、put时添加了第二个参数,表示是否需要token)functionbaseRequest({url,method,header,data,complete},resolve,reject){wx.request({url,method,header,data,success:function(res){//使用这一段判断服务端代码//我们的服务器返回0表示真正成功,其他代码表示各种错误码//if(res.data.code===0){//resolve(res)//}else{//reject(res)//}resolve(res)},fail:function(res){reject(res)},完成:function(res){complete(res)}})}functionwait(options,needToken,resolve,reject){if(needToken){vartoken=wx.getStorageSync('token')if(!token){setTimeout(()=>{wait.apply(null,arguments)},200)}else{if(!options.header){options.header={}}options.header["token"]=tokenbaseRequest(options,resolve,reject)}}else{baseRequest(options,resolve,reject)}}functionrequestPromise(options,needToken=true){letreq=newPromise((resolve,reject)=>{wait(options,needToken,resolve,reject)})returnreq}functionget(options,needToken){options.method='GET'returnrequestPromise(options,needToken)}functionpost(options,needToken){options.method='POST'if(!options.header){options.header={}}options.header["Content-Type"]="application/x-www-form-urlencoded"returnrequestPromise(options,needToken)}functionput(options,needToken){options.method='PUT'if(!options.header){options.header={}}options.header["Content-Type"]="application/x-www-form-urlencoded"returnrequestPromise(options,needToken)}module.exports={get,post,put}使用方法:(使用方法同上,只是调用时多了一个参数)1.编写上面代码到一个单独的文件中,我的文件名为network.js2。然后将其绑定到全局wx对象。wx。Network=require('./network.js').(绑定在app.js中)3、示例如下wx.Network.get({url:'xxx.xxx.xxx',//请求路径data:{a:"a"//参数列表}},true//添加第二个参数,true表示需要token,false表示不需要).then(res=>{console.log("requestsuccessful")}).catch(res=>{console.log("request失败的”)})