当前位置: 首页 > wzjs >正文

青岛房地产网站建设全方位营销型网站

青岛房地产网站建设,全方位营销型网站,wordpress国内加速,四川建设网官网电话1.完善请求-响应拦截器 如何判断成功还是失败? 如果成功,传递成功数据的同时新增 isSuccess:true字段如果失败,传递失败数据的同时新增 isSuccess:false字段 1.使用请求//配置请求拦截器 instance.interceptors.request (config) > {cons…
1.完善请求-响应拦截器

如何判断成功还是失败?

  1. 如果成功,传递成功数据的同时新增 isSuccess:true字段
  2. 如果失败,传递失败数据的同时新增 isSuccess:false字段
1.使用请求

在这里插入图片描述

//配置请求拦截器
instance.interceptors.request = (config) => {const token = getStorage('token')if (token) {config.header['token'] = token}return config
}
//配置响应拦截器
instance.interceptors.response = async (response) => {return response
}switch ((data, code)) {case 200:return datacase 208:const res = await modal({content: '失败,请重新登录',showCancal: false})if (res) {clearStorage()wx.navigateTo({url: '/pages/login/login'})}return Promise.reject(response)default:toast({title: '程序出现异常,请联系客服或稍后重试'})return Promise.reject(response)
}
export default instance
2.请求封装-添加并发请求
  1. 使用 async 和await方式,当第一个请求结束以后才能发起第二个请求,会造成请求的阻塞,从而影响页面的渲染速度。
  async allHandler () {await instance.get('/index/findBanner')await instance.get('/index/findBannerCategory1')await instance.get('/index/findBanner')await instance.get('/index/findBannerCategory1')}
  1. 使用 Promise.all() 方式,能将多个请求同时发送,不会造成堵塞,不影响速度。
  async allHandler () {await Promise.all([instance.get('/index/findBanner'), instance.get('/index/findBannerCategory1'), instance.get('/index/findBanner'), instance.get('/index/findBannerCategory1')])}

封装一下:

  all(...promise) {return Promise.all(promise)}
2.添加loading
  1. 在请求发送之前,需要通过wx.showLoading展示loading效果
  2. 服务器响应数据以后,需要调用wx.hideLoading隐藏loading效果
complete: () => {wx.hideLoading()
}

三个问题:
(1)每次请求都会执行 wx.showLoading(),但是页面中只会显示一个,后面的 loading 会将前面的覆盖。
(2)同时发起多次请求,只要有一个请求成功响应就会调用 wx.hideLoading,导致其他请求还没完成,也不会 loading。
(3)请求过快 或一个请求在另一个请求后立即触发,这时候会出现 loading 闪烁问题。

我解决这三个问题:首先在类中新增一个实例属性 queue,初始值是一个空数组

(1)发起请求之前,判断 queue 如果是空数组则显示 loading ,然后立即向 queue 新增请求标识。
(2)在 complete 中每次请求成功结束,从 queue 中移除一个请求标识,queue 为空时隐藏 loading。
(3)为了解决网络请求过快产生 loading 闪烁问题,可以使用定时器来做判断即可。

3.控制loading显示

需要一个开关来控制 loading 显示。

  1. 类内部设置默认请求参数 isLoading 属性,默认值是 true,在类内部根据 isLoading 属性做判断即可
  2. 某个接口不需要显示 loading 效果,可以在发送请求的时候,可以新增请求配置 isLoading 设置为 false
  3. 整个项目都不需要显示 loading 效果,可以在实例化的时候,传入 isLoading 配置为 false
  defaults = {baseURL: '', // 请求基准地址url: '', // 接口的请求路径data: null, // 请求参数methods: 'GET', // 默认的请求方法// 请求头header: {'Content-type': 'application/json' // 设置数据的交互格式},timeout: 60000, // 默认的超时时长,默认为一分钟isLoading: true}if(options.loading) {
}
4.封装uploadAPI

将本地资源上传到服务器

wx.uploadFile({// 开发者服务器地址、接口地址url: '',// 要上传的文件路径filePath: avatarUrl,// 文件对应的key,服务器需要根据key来获取文件的二进制信息name: 'file',success: (res) => {// 服务器返回的数据是JSON字符串,要用JSON.parse转换res.data = JSON.parse(res.data)this.setData({avatarUrl: res.data.data})}
})

对其进行封装
(1)首先在WxRequest类内部创建upload实例方法,实例方法接收四个属性

return new Promise((resolve, reject) => {if (op.methods === 'UPLOAD') {wx.uploadFile({...options,success: (res) => {res.data = JSON.parse(res.data)// 合并参数const mergeRes = Object.assign({}, res, {config: options,isSuccess: true})resolve(this.interceptors.response(mergeRes))},fail: (err) => {const mergeRes = Object.assign({}, err, {config: options,isSuccess: false})reject(this.interceptors.response(mergeRes))}})} else {wx.request({...options,success: (res) => {resolve(res)},fail: (err) => {reject(err)}})}})
5.使用npm包发送请求
import WxRequest from 'mina-request'
import { getStorage, clearStorage } from './storage'
import { toast, modal } from './extendApi'
// 对 WxRequest 进行实例化
const instance = new WxRequest({baseURL: 'https://gmall-prod.atguigu.cn/mall-api', // 使用时请换成真实接口timeout: 1000, // 超时时长isLoading: false // 是否使用默认的 loading 效果
})// 添加请求拦截器
instance.interceptors.request = (config) => {const token = getStorage('token')if (token) {config.header['token'] = token}// 在发送请求之前做些什么return config
}// 添加响应拦截器
instance.interceptors.response = async (response) => {const { isSuccess, data } = responseif (!isSuccess) {toast({title: '网络异常请重启',icon: 'error'})return Promise.reject(response)}switch ((data, code)) {case 200:return datacase 208:const res = await modal({content: '鉴权失败,请重新登录',showCancal: false})if (res) {clearStorage()wx.navigateTo({url: '/pages/login/login'})}return Promise.reject(response)default:toast({title: '程序出现异常,请联系客服或稍后重试'})return Promise.reject(response)}//   return response
}
// 导出实例
export default instance
6.小程序设置环境变量

开发环境需要调用开发板的接口地址,生产环境需要调用正式版的接口地址,小程序提供了wx.getAccountInfoSync()接口,获取当前账号信息。
开发版====>develop
体验版====>trial
正式版====>release

// 用来配置当前小程序项目的环境变量
const { miniProgram } = wx.getAccountInfoSync()
const { miniProgram } = miniProgram
let env = {baseURL: 'https://gmall-prod.atguigu.cn/mall-api'
}
switch (envVersion) {case develop:env.baseURL = 'https://gmall-prod.atguigu.cn/mall-api'breakcase trial:env.baseURL = 'https://gmall-prod.atguigu.cn/mall-api'breakcase release:env.baseURL = 'https://gmall-prod.atguigu.cn/mall-api'breakdefault:env.baseURL = 'https://gmall-prod.atguigu.cn/mall-api'break
}
export { env }
7.接口调用方式说明

一个接口是一个方法,每个方法需要单独导出

// 导入封装的网络请求模块实例
import http from '../utils/http'
// 获取首页轮播图数据
export const reqSwiperData = () => http.get('/index/findBanner')

文章转载自:

http://ZAB6IWov.rxtxf.cn
http://Uq7YFUSq.rxtxf.cn
http://9pAziPWQ.rxtxf.cn
http://DOZwklyE.rxtxf.cn
http://fs7Q4QoE.rxtxf.cn
http://hi3nKfIY.rxtxf.cn
http://rfyxYVJw.rxtxf.cn
http://KWcLyPaA.rxtxf.cn
http://KlyrIXsM.rxtxf.cn
http://EWCZ5VOb.rxtxf.cn
http://BftVeJlx.rxtxf.cn
http://H04wX2Bz.rxtxf.cn
http://d3yheGD4.rxtxf.cn
http://01rFP0vJ.rxtxf.cn
http://9gNSva0B.rxtxf.cn
http://GGeSKK9m.rxtxf.cn
http://lAqCS7ua.rxtxf.cn
http://oGBbwUkz.rxtxf.cn
http://nhhGoNiI.rxtxf.cn
http://m35D35rQ.rxtxf.cn
http://zamRF6eb.rxtxf.cn
http://wqedUy8s.rxtxf.cn
http://BhoaHgZq.rxtxf.cn
http://3r5GJiZA.rxtxf.cn
http://gWqgcgqQ.rxtxf.cn
http://DY3A5Pjc.rxtxf.cn
http://vxdcTr0W.rxtxf.cn
http://Bmv1wrwR.rxtxf.cn
http://XUEfeZgW.rxtxf.cn
http://7fKcyj6D.rxtxf.cn
http://www.dtcms.com/wzjs/711099.html

相关文章:

  • 做网站导航栏目怎么做wordpress如何使用dplayer
  • 安康做企业网站的温州网站网络公司
  • 珠海市企业网站制作平台深圳手机网站设计公司
  • 电子商务网站建设技术有哪些方面企业融资论文
  • 上海网站建设咨询怎么做电影网站吗
  • 个人网站收款接口软件开发一般多少钱
  • iis7 多个网站 80端口上海前端
  • 仿起点小说网站开发揭阳网站制作平台
  • 哈尔滨制作网站价格成都淮州新城建设投资有限公司网站
  • 广州 环保 凡人网站建设排名点击软件
  • 网站结构怎么分析网站的建设流程具体有哪些
  • 绍兴做网站公司哪家好注册公司流程及手续
  • 网站上传小马后怎么做spring做网站
  • 免费网站建设方案免费模板网站建设
  • 口岸地区网站建设内容福建中国建设工程造价管理协会网站
  • 能被百度收录的建站网站做悬赏的网站
  • 哈尔滨网站建设2017海报设计分析
  • 江西求做网站宁波三盛网络网站建设
  • wordpress多个网站asp.net网站开发工程师(c
  • 织梦技校招生网网站模板整站源码山东企业建站软件
  • 吉林企业建站系统费用网站建设开封软件制作
  • 安平网站建设淘宝关键词优化技巧
  • 网站引量方法软件开发公司组织架构
  • 如何在第三方网站做推广无锡机关单位建设网站
  • 网站加速器免费企业网站建设发展历程
  • 开的免费网站能赚钱吗河北明迈特的网站在哪里做的
  • 门户网站源码入驻景翔物流网站建设公司
  • 在百度上怎么搜到自己的网站网站空间的建设
  • 阜新市项目建设网站现在o2o的平台有哪些
  • 制作网站的工作流程如何申请自己的网站空间