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

uni-app开发微信小程序封装异步请求

为什么要封装

  1. 原生的微信小程序请求不支持Promise
  2. uni-app的请求不能够方便的添加各种效果,例如加载时的loading
  3. uni-app的请求返回值是一个数组,不方便后续添加各种方法
  • 在uni-app项目中如需经常发起网络请求,可以为uni.request方法进行二次封装,使代码更加简洁,便于后期修改维护

  • 原无封装代码:

onLoad() {
		// 在页面加载时调用
		this.getSwipers()
	},
	methods: {
		getSwipers () {
			// 发送请求
			uni.request({
				url: 'http://localhost:8082/api/getlunbo',
				// 使用监听函数防止this指向改变
				success: res =>{
					// 判断是否成功返回数据
					if(res.data.status !== 0){
						return uni.showToast({
							title: '获取数据失败!'
						})
					}
					// 赋值
					this.swipers = res.data.message
				}
			})
		}
	}

使用

  1. 新建api.js,结构如图:
    在这里插入图片描述
  2. api.js代码如下:
// 单独配置url地址,便于以后维护
const BASE_URL = 'http://localhost:8082'
// 暴露一个方法,用uni.request发送请求,异步处理的封装最好用promise
export const myRequest = (options)=>{
	// resolve(成功之后的回调函数)和reject(失败之后的回调函数)
	return new Promise((resolve,reject)=>{
		// 使用uni.request发送请求
		uni.request({
			// 拼接请求地址
			url:BASE_URL+options.url,
			// 请求方式
			method: options.method || 'GET',
			// 数据
			data: options.data || {},
			// 请求成功
			success: (res) => {
				// 判断请求数据是否成功
				if(res.data.status !== 0) {
					return uni.showToast({
						title: '获取数据失败!'
					})
				}
				resolve(res)
			},
			// 请求失败
			fail: (err) => {
				uni.showToast({
					title: '请求接口失败!'
				})
				reject(err)
			}
		})
	})
}
  1. 在main.js中导入,并全局挂载
import { myRequest } from './util/api.js'

Vue.prototype.$myRequest = myRequest
  1. 在需要发送网络请求的页面配置:
	onLoad() {
		// 在页面加载时调用
		this.getSwipers()
	},
	methods: {
		// 获取轮播数据
		async getSwipers () {
			const res = await this.$myRequest({
				url: '/api/getlunbo'
			})
			this.swipers = res.data.message
		}
	}

相关文章:

  • Python语法速览与机器学习开发环境搭建
  • uni-app在小程序,h5端,安卓端的打包发布
  • HashSet和HashMap的区别
  • Vue中的使用axios封装的全局拦截器
  • [Swift] Enum 好用, Enum 可以更易用
  • VUE中的全局时间过滤器(格式化时间)
  • Android ScrollView滑动事件和子控件点击事件冲突
  • 阿里云CentOs8安装node,pm2,mysql数据库以及运行.sql文件
  • cocoapods安装完第三方类库后不生成workspace
  • 阿里云CentOs搭建node环境以及配置API接口服务器
  • 区块链之以太坊初体验——以太坊平台学习总结
  • 阿里云CentOs中Vue项目的上线(node+express+pm2)
  • iptables总结_02
  • uni-app中的分类页面(仿京东分类页面)(scroll-view的使用)
  • oracle select decode判断 ,sign使用例子
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【RocksDB】TransactionDB源码分析
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache Pulsar 2.1 重磅发布
  • co模块的前端实现
  • ES6简单总结(搭配简单的讲解和小案例)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Java的Interrupt与线程中断
  • js ES6 求数组的交集,并集,还有差集
  • Redis学习笔记 - pipline(流水线、管道)
  • Terraform入门 - 3. 变更基础设施
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Yeoman_Bower_Grunt
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端之React实战:创建跨平台的项目架构
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • !!java web学习笔记(一到五)
  • ###C语言程序设计-----C语言学习(6)#
  • #Linux(权限管理)
  • (0)Nginx 功能特性
  • (1)虚拟机的安装与使用,linux系统安装
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Python第六天)文件处理
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (区间dp) (经典例题) 石子合并
  • .Net 垃圾回收机制原理(二)
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET成年了,然后呢?
  • .net对接阿里云CSB服务
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • /etc/sudoer文件配置简析
  • @Async注解的坑,小心
  • [Angular] 笔记 6:ngStyle