评论

基于 wx.request 接口封装的请求的函数示例

封装统一的wx.request函数,方便调用

1、代码片段 https://developers.weixin.qq.com/s/h5NeS7m57ezM


2、项目目录

3、代码示例

1、有多个环境配置的项目,可通过如下代码做配置
/*
 * develop=开发版 
 * trial=体验版 
 * release=正式版 
 */
var {
  envVersion
} = wx.getAccountInfoSync().miniProgram;  // wx.getAccountInfoSync() uni 无法转换 getAccountInfoSync

// envVersion = "develop"   // 方便调试
export const BASEURL = ({
  develop"http://localhost:3003", 
  trial"http://localhost:3003", 
  release"http://localhost:3003",
})[envVersion];

// 习惯链式封装函数,或有接触 https://panjiachen.gitee.io/vue-element-admin-site/zh/ 的可用 fetchDemo.js 里面的操作方式
import {
  request
} from '../utils/request.js';

import {
  BASEURL
} from './BASEURL.js';

export function fetchDemo(data{
  return request({
    url: BASEURL + "/api/Common/List",
    data: data,
    method"get",
  })
}

    async function GoExample_01() {
      /**
       * 改造使用链式结构
       */
      // 同步
      let result = await util.API.fetchDemo({}, {
        isLoadingtrue,
        maskfalse,
      })
      console.log("result=>", result)
    }

2、 习惯原生小程序开发,不想改变wx.request 结构使用的可选用
   /***
       * 传统模式 尽量保持
        wx.request({
          url: 'url',
        })
        一致
      */
      util.request({
        ...util.API.fetchExample(),
        success(res) {
          console.log("传统 res=>", res)
        },
        fail(err) {
          console.log("传统 err=>", err)
        }
      })

代码封装

/**
 * 
 * @param {*} options 
 * @param {*} params 
 * isLoading 是否显示加载条
 * mask 是否穿透
 */
export const request = function (options = {}, params = {}{


  options.header = options.header ? options.header : {};


  const Token = wx.getStorageSync('Token');
  try {
    options.header["Authorization"] = "Authorization" + " " + Token;
  } catch (e) {
    console.log(e)
  }


  var next;
  if (params && params.isLoading) {
    wx.showLoading({
      title'',
      mask: params.mask ? true : false
    })
    next = function () {
      wx.hideLoading();
    }
  }
  return new Promise((reslove, reject) => {
    wx.request({
      ...options,
      ...{
        timeout30 * 1000,
        success(res) => {
          if (!!next) {
            next();
          }
          console.log("请求 options.data=>", options.data);
          console.log("请求 res.data=>", res.data);
          let {
            Code,
            Data,
            Msg
          } = res.data;
          
          if (typeof options.success == "function") {
            options.success(res);
          }
          reslove(res.data);
        },
        fail(err) => {
          if (!!next) {
            next();
          }
          console.log("请求 err=>", err);
          if (typeof options.fail == "function") {
            options.fail(err);
          }
          if (!options.hideNetToast) {
            netFailToast();
          }
          reject(err);
        }
      }
    });
  })
}





最后一次编辑于  2022-05-09  
点赞 0
收藏
评论
登录 后发表内容