开始写小程序的时候对小程序请求接口的requestAPI至关无奈,由于项目急就没考虑那么多,直接开干。后边闲下来就考虑了一下作了一个封装,来统一作一些数据处理,达到减轻开发重复性,优化代码的做用:es6
首先我封装了一个类:json
import { base_url } from '../config/api' // 引入咱们接口的ip,后续咱们只须要传入api const tips = { 1: '抱歉,出现了一个错误', 1005: 'appkey无效,请求错误', 3000: '没有权限', ... } // 多种错误处理字符串 ---------- export default class HTTP { fetch (params) { const { url, method = 'GET', data = {}, success } = params // es6对象解构请求是咱们须要的传参和成功的处理 wx.request({ url: base_url + url, method, data, header: { 'Content-Type': 'application/json' }, success: res => { const { code } = res.data if (code === 0) { // 与后台约定的成功判断 success && success(res.data) // 成功的回调 return } const { error_code } = res.data this._show_error(error_code) // 失败的处理,弹出提示框 }, fail: err => { this._show_error(1) // 失败的处理,弹出提示框 } }) } _show_error (error_code = 1) { const tip = tips[error_code] wx.showToast({ title: tip ? tip : tips[1], icon: 'none', duration: 2000 }) } }
这里,咱们作了一个简单的基础封装,可是也是必须从回调中作出相应的处理,若是咱们须要一个变量直接拿到此次请求的数据呢,那咱们就须要用到promise, async await 来进行处理了,代码以下:小程序
import { base_url } from '../config/api' // 引入咱们接口的ip,后续咱们只须要传入api const tips = { 1: '抱歉,出现了一个错误', 1005: 'appkey无效,请求错误', 3000: '没有权限', ... } // 多种错误处理字符串 export default class HTTP { fetch (params) { return new Promise((resolve, reject) => { const { url, method = 'GET', data = {}, success } = params // es6对象解构请求是咱们须要的传参和成功的处理 wx.showLoading('加载中') wx.request({ url: base_url + url, method, data, header: { 'Content-Type': 'application/json' }, success: res => { const { data = {}, // data默认是一个对象 data : { code, msg } } = res if (code === 0) { // 与后台约定的成功判断 wx.showToast({ title: msg }) resolve([null, _data]) // 成功的回调 return } const { error_code } = res.data this._show_error(error_code) // 失败的处理,弹出提示框 reject([data]) // 失败的回调,并暴露出数据 }, fail: err => { this._show_error(1) // 失败的处理,弹出提示框 reject([{msg = '请求出错'}]) // 失败处理 }, complete: () => { wx.hideLoading('加载中') } }).catch(err => err) } }) _show_error (error_code = 1) { const tip = tips[error_code] wx.showToast({ title: tip ? tip : tips[1], icon: 'none', duration: 2000 }) } }
而后咱们在调用的时候直接利用async和await:api
import HTTP from '../util/HTTP ' import api from '../api' // 引入接口 class Model extends HTTP { async search (data) { const [err, res] = await this.Fetch({ url: api, data }) if(err){ //失败作的对应处理 return } // 成功的对应处理 } }
若是不采用继承的方式,那么直接实例化HTTP而后调取fetch也是同样的方式,这里就不过多演示了
但愿你们能提出积极的建议,有问题能够联系我promise