微信小程序request请求封装(async...await...使用)

小程序使用async…await…的前提

小程序内置支持ES6,
详情==>本地设置里 勾选“增强编译”,就可以支持async…await…
在这里插入图片描述
点击这里直达官网的增强编译介绍,懒得去官网的同鞋可以看下图:
在这里插入图片描述

勾选以后,就可以就行请求封装了。开始步入正题==========》

封装:request请求

const baseUrl = 'https://xxxxxxx.com';//定义服务器地址公共部分

/**
 * 参数说明
   parmas:{},是一个对象
 */
let countClient = 0;//计数器,多次调用接口,同时关闭loading提示框 
export const client = (parmas) => {
//加个loading,友好一点
  countClient++;
  wx.showLoading({
    title: '加载中',
    mask: true
  });
  
  const token = wx.getStorageSync('token');
  if(parmas.method === undefined) {//若是没有传请求方式,默认get
    parmas.method = 'get';//设置默认值
    parmas.header = {'content-type': 'application/json'};//设置默认值
  }
  if(token){//这里的token验证如果不需要,可以删除掉
    if(parmas.method.toLowerCase() === 'post') {
    //若是删除了token验证,只保留这个if语句就可以,这里判断post,设置请求头
      parmas.header={
        "content-type":"application/x-www-form-urlencoded",
        'Authorization': 'Bearer ' + token
      }
    } else {
    	parmas.header={
	      'content-type': 'application/json',
	      'Authorization': 'Bearer ' + token,
	    }
    }
  }
  
  return new Promise((resolve,reject) => {
    wx.request({
      ...parmas,
      url: baseUrl+parmas.url,
      success:res => {
        resolve(res)
      },
      fail:err => {
        reject(err)
      },
      complete:()=> {
      //无论成功失败,均关闭loading
        countClient--;
        if(countClient === 0) {
          wx.hideLoading()
        }
      }
    });
  })
};

调用:request请求

1.首先引入封装请求的js文件,login下文有介绍,微信登录使用,不需要的可以不引入。

import {client,wlogin} from "../../tools/router.js"

2.调用方式,传入对象的参数,可以去小程序官网查找官方接口支持的任意参数,点击直达wx.request

//get请求,不传参的话,非常简洁
const mapData = await client({
  url:'/xxx/xxxxxxx',//这里放入路径就行,服务器地址公共部分已拼接
})


//post请求传参
const mapData = await client({
  url:'/xxx/xxxxxxx',//这里放入路径就行,服务器地址公共部分已拼接
  data:{code:"这里是code"},
  method:'post'
})

//若是为了兼容性,可以使用promise的调用方式
client({
  url:'/xxx/xxxxxxx',//这里放入路径就行,服务器地址公共部分已拼接
}).then(res=> {
	//这里是业务处理逻辑
	console.log("成功返回的数据",res)
}).catch(err=>{
    console.log("错误的原因",err)
})

3.这样就解决了异步问题,由上到下依次执行。

在这捎带一个微信登陆封装:

看这里就很清楚,最简单的封装方式。

export const wlogin = ()=> {
  return new Promise((resolve,reject)=> {
    wx.login({
      success: (res) => {
        resolve(res)
      },
      fail:(error)=> {
        reject(error)
      }
    })
  })
}

微信登录调用方式:

//这样直接获取返回的code
const {code} = await wlogin()
console.log("这是登录返回的code",code)

这里再附赠一个循环遍历函数取值(同步)

解决需求:要一次性取上千条数据,但是只能返回100条,并且不可以异步的时候,使用async…await…同步获取。

  async fn() {
      let count = 100;
      for(let u=0; u<50; u++) {
        let result= await client({
          url:'/xxxx/xxxxxxxxx',
          data:{
           take:100,
           skip:count
         }
       })
       console.log(result);
       count += 100;
      }  
  },
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值