小程序封装ajax等工具函数

作者: an祭 | 来源:发表于2018-02-07 16:09 被阅读211次

    重复性代码

    我们知道使用小程序自带的wx.request API可以发起网络请求,写法如下

    wx.request({
      url: 'test.php', //仅为示例,并非真实的接口地址
      data: {
         x: '' ,
         y: ''
      },
      header: {
          'content-type': 'application/json' // 默认值
      },
      success: function(res) {
        console.log(res.data)
      }
    })
    

    但是做项目的时候碰到多个请求的时候,每次请求就需要写一遍,会存在很多重复代码,好在小程序项目目录里面有个util目录,里面也给我们写了个示例的formatTime工具函数,并将它exports出来了

    // util.js
    const formatTime = date => {
      const year = date.getFullYear()
      const month = date.getMonth() + 1
      const day = date.getDate()
      const hour = date.getHours()
      const minute = date.getMinutes()
      const second = date.getSeconds()
    
      return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
    }
    
    const formatNumber = n => {
      n = n.toString()
      return n[1] ? n : '0' + n
    }
    
    module.exports = {
      formatTime: formatTime
    }
    

    书写我们自己的工具函数

    首先,我们将ajax函数封装下,返回一个promise, 将下面代码添加到 util目录下的util.js中

    const ajax = (url, data, method, config = {}) => {
          let headerConfig = {  // 默认header ticket、token、params参数是每次请求需要携带的认证信息
            ticket: '...',
            token: '...',
            params: '...'
          }
          return new Promise((resolve, reject) => {  // 返回一个promise
            wx.request({
                url: host + url, // 拼接url
                data, 
                header: Object.assign({}, headerConfig, config), // 合并传递进来的配置
                method: method,
                success(data){
                    resolve(data)
                }
            })
          })
    }
    

    我们再添加一个深拷贝的函数

    function deepCopy(o, c) {
      var c = c || {}
      for (var i in o) {
        if (typeof o[i] === 'object') {
          //要考虑深复制问题了
          if (o[i].constructor === Array) {
            //这是数组
            c[i] = []
          } else {
            //这是对象
            c[i] = {}
          }
          deepCopy(o[i], c[i])
        } else {
          c[i] = o[i]
        }
      }
      return c
    }
    
    

    添加好后,再将函数exports出去 如下

    module.exports = {
      formatTime: formatTime,
      ajax: ajax,
      deepCopy: deepCopy
    }
    

    使用工具函数Uti

    首先我们在app.js顶部添加

    const util = require('./utils/util.js')  // 将工具函数导入进来
    

    然后在App函数中添加Util字段

    Util:{
        ajax: util.ajax,
        deepCopy: util.deepCopy
    }
    

    页面中实例化getApp()函数后,我们就可以使用工具函数了

    let app = getApp()
    
    app.Util.ajax(....).then((data) => {  // 使用ajax函数
        // 请求相应后的操作
    })  
    

    tip

    通过封装了工具类的代码提取出来封装成函数,我们就可以少写一些重复性的代码,并培养我们消除重复代码的习惯。

    相关文章

      网友评论

        本文标题:小程序封装ajax等工具函数

        本文链接:https://www.haomeiwen.com/subject/wwxazxtx.html