首页 > 编程语言 > 小程序promise封装

小程序promise封装

时间:2022-11-09 15:01:58浏览次数:33  
标签:封装 const 程序 promise result obj copy data wx

小程序promise封装

// ajax promise封装
const requestFetch = (url, method, param) => {
  // 一个页面中可能会发送多个请求,ajaxTimes记载同时发送异步请求代码的次数,目的是为了在请求数据都完成后再消除加载框
  let ajaxTimes = 0;
  // const baseUrl = '基本url路径';

  ajaxTimes++;
  // 显示加载中效果
  wx.showLoading({
    title: "加载中",
    mask: true
  });
  let header = {
    // ...param.header,
    'Authorization': wx.getStorageSync('token'),
    'content-type': 'application/json' // 默认值
  };
  return new Promise((resolve, reject) => {
    wx.request({
      data: param,
      header: header,
      method: method,
      url: baseUrl + url,
      success: (result) => {
        const errArrCode = [2010, 1008, 2016]
        if (result.data.code == 2008) {
          Notify({
            type: 'danger',
            message: '登录失效,返回重新登录'
          });
          wx.removeStorageSync('token')
          setTimeout(() => {
            wx.reLaunch({
              url: '../login/login'
            })
          }, 1500)

        } else if (result.data.code == 2015) {
          Notify({
            type: 'danger',
            message: result.data.msg
          });
          wx.removeStorageSync('token')
          setTimeout(() => {
            wx.reLaunch({
              url: '../login/login'
            })
          }, 1500)
        } else if (errArrCode.includes(result.data.code)) {
          Notify({
            type: 'danger',
            message: result.data.msg
          });
          return
        } else if (result.data.code == 200) {
          resolve(result.data.data)
        } else {
          Notify({
            type: 'danger',
            message: '网络错误'
          });
        }
      },
      fail: (err) => {
        Notify({
          type: 'danger',
          message: '网络连接失败'
        });
        reject(err)
      },
      complete: () => {
        ajaxTimes--;
        // 关闭加载图标
        if (ajaxTimes === 0) {
          wx.hideLoading();
        }
      }
    })
  })
}

const deepCopy = (obj, cache = []) => {
  // typeof [] => 'object'
  // typeof {} => 'object'
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
  // 如果传入的对象与缓存的相等, 则递归结束, 这样防止循环
  /**
   * 类似下面这种
   * var a = {b:1}
   * a.c = a
   */
  const hit = cache.filter(c => c.original === obj)[0];
  if (hit) {
    return hit.copy;
  }
  const copy = Array.isArray(obj) ? [] : {};
  // 将copy首先放入cache, 因为我们需要在递归deepCopy的时候引用它
  cache.push({
    original: obj,
    copy,
  });
  Object.keys(obj).forEach(key => {
    copy[key] = deepCopy(obj[key], cache);
  });
  return copy;
}

标签:封装,const,程序,promise,result,obj,copy,data,wx
From: https://www.cnblogs.com/lifan-fineDay/p/16873686.html

相关文章

  • 微信小程序使用新版Canvas画布实现电子签名
    <viewclass="containercolumn-me"><viewclass="tips">请绘制清晰可见的签名并保存</view><canvasclass="canvas"id="canvas"type="2d"disable-scrol......
  • elementUI 搜索条件、table、页脚封装
    一共分成了两个组件:组件一:搜索条件=>SearchParams.vue组件二:el-table和el-pagination=>TablePagintion考虑到业务的使用场景没用做过多的封装。(1)组件一:搜索条件代......
  • 基于云开发的微信答题活动小程序v1.0搭建部署帮助文档
    11月是全国“119”消防宣传月,不少企事业单位都会举办消防安全知识竞答活动,因此我基于云开发搭建了消防安全知识答题活动小程序。接着,还写完了初阶的手把手教你搭建答题活......
  • C语言——程序环境和预处理
    程序的翻译环境和执行环境编译+链接预处理一.程序的翻译环境和执行环境在ANSIC标准的任何一种实现中,存在两种不同的环境:翻译环境:该环境中源代码会被转换为可执行的机器......
  • 05 uniapp/微信小程序 项目day05
    ​一.登录与支付1.1登录1.1.1条件判断当我们点击结算应当进行条件判断第一个如果没有勾选商品第二个是没选择地址第三个是未登录1.1.2页面布局应该有两个页......
  • uniapp-uview 微信小程序form中自定义校验规则失效问题。
    uniapp-uview微信小程序form中自定义校验规则失效问题。仔细阅读官方文档,发现有提示。需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。如......
  • 微信共享停车场小程序开发设计方案
    随着城市的发展,人们的生活水平提高,车辆的增多,在有限的城市空间中,停车难成为了人们经常遇到的问题,附近找不到停车位置的情况时有发生,为了更好的解决这一问题,可以通过共享停车......
  • Java中的封装,继承,多态
    一,前言​今天总结一下关于Java的三大特性,封装,继承,多态。其实关于三大特性对于从事编程人员来说都是基本的了,毕竟只要接触Java这些都是先要认识的,接下来就系统总结一下。二......
  • 第四十一章 构建数据库应用程序 - 带有CSP Search标签的CSP搜索页面
    第四十一章构建数据库应用程序-带有<CSP:Search>标签的CSP搜索页面search标记创建一个通用搜索页面,可以将其与绑定表单一起使用以执行查找操作。应用程序用户可以从......
  • Day01-3 第一个程序:HelloWorld
    HelloWorld随便新建一个文件夹,存放代码新建一个Java文件文件后缀名为,javaHello.java【注意点】系统可能没有显示文件后缀名,我们需要手动打开编写代......