微信小程序:3用ansync/await这对混蛋还有可爱的promise来封装wx.request

功能的话,在标题讲出来了,我就不废话了,

代码:

写方法

// url:路径
// params:参数
// args:其他参数
import constant from './constant.js';
export default function ghhttp({
  url,
  params = {},
  ...args
}) {
  // 增加token
  Object.assign(args, {
    token: wx.getStorageSync('token')
  })
  // 所有的请求,header默认携带token
  let header = args.header || {
    'Content-Type': 'application/json',
    'token': args.token || ''
  }
  //请求的参数
  let data = params || {}
  // 请求的方式
  let method = args.method || 'GET'
  // hideLoading可以控制是否显示加载状态
  if (!args.hideLoading) {
    wx.showLoading({
      title: '加载中...',
    })
  }
  // 如果请求带http的话,则不添加域名
  if (!/^(http|https):/.test(url)) {
    url = `${constant.domain}${url}`
  }
  //promise封装请求
  return new Promise((resolve, reject) => {
    wx.request({
      url,
      method,
      data: params,
      header,
      success: (res) => {
        if (res && res.statusCode == 200) {
          resolve(res.data);
        } else {
          reject(res)
        }
      },
      fail: (err) => {
        reject(err)
        errormessage();
      },
      complete: (e) => {
        wx.hideLoading();
      }
    })
  })
  // 
  function errormessage() {
    wx.showToast({
      title: '请求接口失败',
      duration: 2000,
      icon: 'none'
    })
  }

}

//p.s.之所以纸样,是因为有的朋友喜欢用promise嘛,所以呢,就这样弄了(假装wx.request跟$.ajax一样),

好吧,$.ajax也是有封装promise的,反正,我就是在这儿把wx.request封装了!就对了!

调用

统一调用的api中心

import ghhttp from '../utils/http.js';
import regeneratorRuntime from '../utils/runtime.js';
class Test {
  constructor() {}
  async getsatinApi() {
    console.log("调用");
    let ajax_data1 = await getApp().globalData.ghhttp({
      url: 'https://www.apiopen.top/satinApi',
      params: {
        type: 1,
        page: 1
      },
    });
    console.log(ajax_data1);
  }
}
let test = new Test();
export default test;

差不多就是这样了,还是那句话,大家看的七七八八就好了,不懂再留言。

对了,这儿科普下import还有require的区别

遵循规范
require 是 AMD规范引入方式
import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
调用时间
require是运行时调用,所以require理论上可以运用在代码的任何地方
import是编译时调用,所以必须放在文件开头
本质
require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require

反正你们理解为!一个只能再头部调用,一个能再全局调用,嗯,就这样

然后不太明白的留言,心情好的访问下我的github给个星星

案例:github上的一个需要小星星的地址

你可能感兴趣的:(微信小程序)