博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mpvue学习笔记-之微信小程序数据请求的封装
阅读量:5948 次
发布时间:2019-06-19

本文共 2745 字,大约阅读时间需要 9 分钟。

简介

美团出品的已经开源出来很久了,一直说要进行一次实践,这不最近一次个人小程序开发就用上了它。

看了微信官方的数据请求模块--,对比了下get和post请求的代码,发现如果在每一个地方都用request的话,那会有很多代码是冗余的,于是就准备自己封装一个,下面就记录一下封装过程。注释也写在下面的代码里了。

实现的结果

  • 代码要简洁
  • 无需每个页面引入一次
  • Promise化,避免回调地狱

封装代码

//src/utils/net.jsimport wx from 'wx';//引用微信小程序wx对象import { bmobConfig } from '../config/bmob';//bmob配置文件const net = {  get(url, data) {    wx.showLoading({      title: '加载中',//数据请求前loading,提高用户体验    })    return new Promise((resolve, reject) => {      wx.request({        url: url,        data: data,        method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT        header: {          'X-Bmob-Application-Id': bmobConfig.applicationId,          'X-Bmob-REST-API-Key': bmobConfig.restApiKey,          'Content-Type': 'application/json'        }, // 设置请求的 header        success: function (res) {          // success          wx.hideLoading();          if(res.statusCode!=200){            wx.showToast({              title: "网络出错,稍后再试",              icon: "none"            });            return false;          }          resolve(res.data);        },        fail: function (error) {          // fail          wx.hideLoading();          reject(error);//请求失败        },        complete: function () {          wx.hideLoading();          // complete        }      })    })  },  post(url, data) {    wx.showLoading({      title: '加载中',    })    return new Promise((resolve, reject) => {      wx.request({        url: url,        data: data,        method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT        header: {          'X-Bmob-Application-Id': bmobConfig.applicationId,          'X-Bmob-REST-API-Key': bmobConfig.restApiKey,          'Content-Type': 'application/json'        }, // 设置请求的 header        success: function (res) {          // success          wx.hideLoading();          resolve(res.data);        },        fail: function (error) {          // fail          wx.hideLoading();          reject(error);        },        complete: function () {          // complete          wx.hideLoading();        }      })    })  }}export default net;//暴露出来供其他文件引用复制代码

使用方法

  • 全局配置请求方式,避免每次import
// src/main.jsimport Vue from 'vue';import App from '@/App';import MpvueRouterPatch from 'mpvue-router-patch';import net from '@/utils/net';//导入封装好的netimport shareConfig from '@/config/share';Vue.prototype.$net=net;//微信小程序网络请求的配置Vue.config.productionTip = falseVue.use(MpvueRouterPatch)const app = new Vue({  ...App})app.$mount()export default {  //省略coding}复制代码
  • 发送请求实例,第一步已经全局配置了net,使用时直接用this.$net即可使用net的方法(get/post)
// src/pages/home/index.vue
复制代码

总结

这次对微信数据请求的封装过程中详细的学习了一下Promise,使用Promise后使得代码更简洁了。踩了一些坑:比如说async一定要与await配套使用,即数据请求前要加上异步标示async。后续会写一篇Promise的文章,这里不做阐述了。

这里贴一下Promise的技术贴以留后用:

转载地址:http://yqdxx.baihongyu.com/

你可能感兴趣的文章
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
oracle进行字符串拆分并组成数组
查看>>
100多个基础常用JS函数和语法集合大全
查看>>
Java8 lambda表达式10个示例
查看>>
innerHTML outerHTML innerText
查看>>
kafka安装教程
查看>>
go语言基础
查看>>
【Windows】字符串处理
查看>>
Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
查看>>
CentOS使用chkconfig增加开机服务提示service xxx does not support chkconfig的问题解决
查看>>
微服务+:服务契约治理
查看>>
save
查看>>
Android DrawLayout + ListView 的使用(一)
查看>>
clear session on close of browser jsp
查看>>
关于吃掉物理的二次聚合无法实现的需要之旁门左道实现法
查看>>
mysql出现unblock with 'mysqladmin flush-hosts'
查看>>
oracle exp/imp命令详解
查看>>
开发安全的 API 所需要核对的清单
查看>>