小程序鸿毛框架(二)数据请求封装

本文介绍了一种基于微信小程序的wx.request封装方法,通过Promise改进数据请求流程,简化代码并提供加载动画与错误处理功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               数据请求的封装,我们开发中数据请求是必不可少的,所以我就以之前开发IOS应用的经验结合js的promise写了一个自认为比较好用的数据请求的封装类,使用这个封装可以为我们剩下很多时间和代码。

 

 

  请求函数封装 

  ./server.js

/*
  1.数据请求基于微信的wx.request封装,如果是开发支付宝请使用my.request替换
  2.通过外层加入promiss结果以promiss对象的形式返回
  3.数据请求封装了简单的加载动画的功能,通过loadingStyle参数控制
*/ 
// 用户token,我们经常会用到的
let user_token = "alksjldk989a8sd7adsvu8cvsd";

// 数据请求封装
function FetcherRequest(api, param, loadingStyle, autoAlertError, method) {
  // 注意⚠️⚠️:此处可以设置post请求自动插入token的操作
  // 这样以后每次调用接口就不用传入token了
  // if (user_token && method == "POST") {
  //   if (param) {
  //     param['token'] = user_token;
  //   } else {
  //     param = { 'token': user_token };
  //   }
  // }
  const req = new Promise((resolve, reject) => {
    if (loadingStyle) {//显示加载动画
      wx.showLoading();
    }
    wx.request({
      url: api,
      data: param ? param : {},
      header: {
        'content-type': 'application/json' // 默认值
      },
      method: method,
      success(res) {//成功
        if (loadingStyle == 1) {//自动关闭加载动画
          wx.hideLoading();
        }
        resolve(res.data);
      },
      fail(err) {//失败
        //关闭加载动画
        wx.hideLoading();
        // 显示网络异常
        wx.showModal({
          title: 'Error',
          content: '对不起,服务器或网络错误,请稍后再试或联系工作人员',
        })
        reject('100 error');
      },
      complete() {//完成

      }
    })
  }).then(data => {//正常返回数据
    // 在此处检查数据是否正常,如果不正常通过autoAlertError判断是否显示错误信息
    // 假设status==200是正常数据
    if (data.status != 200 && autoAlertError) {
      wx.showModal({
        title: 'Error',
        content: data.msg
      })
    }
    return data;
  })
  return req;
}


const fetcher = {

  /*
    api:   接口
    param: 参数
    loadingStyle: 加载动画的模式:默认:1
      0:不显示加载动画
      1:自动显示,数据加载完成后关闭 
      2:自动显示,加载完后不关闭(如果开启自动报错将自动关闭)
    autoAlertError: 是否自动报错(当数据请求异常或返回的数据状态 != 200时) 默认为false
    return: Promise对象
  */

  // POST 请求
  post: function (api, param, loadingStyle = 1, autoAlertError) {
    return FetcherRequest(api, param, loadingStyle, autoAlertError, "POST")
  },
  // POST 无参数请求
  post_wp: function (api, loadingStyle = 1, autoAlertError) {
    return FetcherRequest(api, {}, loadingStyle, autoAlertError, "POST");
  },
  // GET 请求
  get: function (api, param, loadingStyle = 1, autoAlertError) {
    return FetcherRequest(api, param, loadingStyle, autoAlertError, "GET");
  },
  // GET 无参数请求
  get_wp: function (api, loadingStyle = 1, autoAlertError) {
    return FetcherRequest(api, {}, loadingStyle, autoAlertError, "GET");
  }
}

module.exports = fetcher;

应用实例:

pages/index.js

// pages/index.js
const Fetcher = require("./server.js");

Page({
    data: {
        mainData:'',
    },
    onLoad: function (options) {
      // 请求数据
      this.fetchData();
    },
    // 获取数据
    fetchData(){
      let _this = this;
      // 参数
      let params = {
           name:'richie',
           age:18
          };
      // 参数依次为: 接口/参数/是否自动显示加载动画/是否自动报错(当res.status!=200时)
      Fetcher.post("https://www.baidu.com",params,1,1).then(res=>{
        console.log(res);
        _this.setData{mainData:res.data};
      }); 
    }
})

源码请看:git源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值