微信小程序中异步请求的封装

微信小程序中异步请求的封装函数

1.基于uni-app下异步请求的封装

  • 封装异步请求之后
  • 需要挂载到原型上(即在入口文件main.js中)便可以this.request
    在这里插入图片描述

1) 在utils/request.js文件下

export default (params) => {
    
    
		return new Promise((resolve, reject) => {
    
    
			uni.showLoading({
    
    
				title:"加载中"
			})
			//微信小程序的内置
			wx.request({
    
    
				...params,/*使用拼接参数的形式,那么之后调用的参数便不受限制*/
				success(res) {
    
    
					resolve(res.data);
				},
				fail(err) {
    
    
					reject(err)
				},
				complete() {
    
    
					uni.hideLoading();
				}
			})
		})
	}

2) 挂载到应用原型上:
在main.js入口文件中:

import Vue from 'vue'
import App from './App'
import request from './utils/request'
Vue.config.productionTip = false
Vue.prototype.request=request;
App.mpType = 'app'

const app = new Vue({
    
    
    ...App
})
app.$mount()

3) 使用:
在这里插入图片描述

2.基于原生小程序下异步请求的封装函数
ps:由于会出现同步发送多个异步请求,因此需要等待全部请求完毕时再关闭加载中的效果

1) 封装 utils/request.js

//由于会出现同步发送多个异步请求,因此需要等待全部请求完毕时再关闭加载中的效果
let ajaxTime=0;
export const request=(params)=>{
    
    

    //判断url中是否带有/my/  请求时私有的路径 有则使得 header带上token
    let header={
    
    ...params.header}
    if(params.url.includes("/mg/")){
    
    
        //拼接header 带上token(若没有则直接使用params传过来的参数)
        header["Authorization"]=wx.getStorageSync('token');
    }
    ajaxTime++;
    /*发送请求之前显示加载信息 */
    wx.showLoading({
    
    
        title:"加载中",
        mask: true,
    });
    const urlBase="https://api-hmugo-web.itheima.net/api/public/v1"
    return new Promise((reslove,reject)=>{
    
    
        /*reslove、reject分别为两种接口返回的回调函数,
        回调函数中具体 */
        //对url进行简化,拼接
        var reqTask = wx.request({
    
    
           ...params,/*接收到的的参数将被放在这里(对象形式) */
           header:header,
           url:urlBase+params.url,
           success:(result)=>{
    
    
               reslove(result.data.message);
           },
           fail:(err)=>{
    
    
               reject(err);
           },
           complete:()=>{
    
    
               ajaxTime--;
               if(ajaxTime===0){
    
    
                 //在前面添加了++表示每有一个发送请求就自增一次,但每有一个完成请求就自减一次,
                //知道ajaxTime=0后,所有数据请求完毕,这时便可以关闭加载中的效果
                wx.hideLoading();
               }
               //不管成功还是失败都会调用该方法        
           }
        });
          
    })
}

2) 使用
(由于这里时原生微信小程序,并没有挂载带Vue实例中,因此每次使用需要引入request文件
在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_46872121/article/details/111413884