首页 > 其他分享 >uniapp Promise封装全局uni.request网络请求

uniapp Promise封装全局uni.request网络请求

时间:2024-08-04 14:25:57浏览次数:18  
标签:uniapp 请求 title res request Promise uni data

前言:

在一个项目开发时,我们除了页面布局之外,就是数据处理了,封装一个全局的网络请求,有助于我们处理一些公用逻辑代码,更加专注于业务代码

官方api说明:

https://uniapp.dcloud.net.cn/api/request/request.html

一般我们只关注这几个参数

url 也就是我们的baseurl,根域名

header 为一个对象,请求的 header 中 content-type 默认为 application/json 一般不做处理,可能会根据后端添加 token校验参数

method 请求方式一般都常用 get post

成功回调和axios有所差异,axios只会默认状态码statusCode:200返回,其他的统统走失败回调

uni.request:

success回调这个是这篇文章的重点,为什么这么说呢,很多后端的小伙伴只会固定的思维去处理状态码,多人开发中,有些后端的同学会按照他们自己的习惯去定义请求状态码,我们只有把这里弄清楚了才会游刃有余的处理请求拦截

200 -500 只要是请求发送到服务器返回的状态码都走success回调

小伙伴这里可以自信测试下喔

弄懂了uni.request

我们就开始封装吧

Promise

Promise 是现代 JavaScript 中异步编程的基础。它是一个由异步函数返回的对象,可以指示操作当前所处的状态。在 Promise 返回给调用者的时候,操作往往还没有完成,但 Promise 对象提供了方法来处理操作最终的成功或失败。

说实在点,就是让异步处理请求在多个接口请求中实现同步,举例:设计网页开发中一个页面可能存在要请求多个接口,且会在第一个请求拿到数据之后才能请求第二个接口

封装代码:
创建文件server.js
const  geturl = ()=>{
	if (uni.getSystemInfoSync().platform !== "devtools") {
		// 线上环境
		const BASE_URL="xxx"; 
		return BASE_URL	
		
	}else{
		// 开发环境
		const BASE_URL="xxx"; 
		return BASE_URL
	}
}
export const myRequest=(options)=>{ 

    //传入的options是一个json对象
	
	return new Promise((resolve,reject)=>{

		// 添加登录验证
		let token = uni.getStorageSync("token");
		
		// 设置请求loading动画
		uni.showLoading({
			title:"加载中..."
		})
		let BASE_URL = geturl();
		// 发送请求
		uni.request({
			url:BASE_URL+options.url,
			method:options.methods||"GET",
			data:options.data || {},
			dataType:options.dataType || "json",
			header:{
				'content-type': 'application/x-www-form-urlencoded',
				'Authorization':token
			},
			
			// 请求成功回调
			success: (res) => {
				// console.log(res);//打印返回结果
				// 此处设置请求成功返回的状态码,并设置拦截其他状态码,统一给出响应提示  statusCode
				if(res.statusCode==200){

					switch (res.data.status){
						case 200:
						console.log("成功");
						uni.hideLoading();
						resolve(res.data)
							break;
						case 411:
						console.log("失败");
						uni.hideLoading();
						uni.showToast({
							icon:"none",
							title:res.data.msg
						})
							break;
						case 101:
						uni.hideLoading();
						console.log("请登录");
						    break;    
						default:
						uni.showToast({
							icon:'none',
							title:'服务器出错了'
						})
							break;
					}
					
					// 请求成功隐藏loading动画
					
				}else{
                    //返回其他类型的状态码
					let title = res.statusCode.toString()
					uni.hideLoading();
					uni.showToast({
						icon:"none",
						title:title,
						duration:2000
					})
					console.log(res.statusCode);
				}		
			},
			
			// 请求失败回调
			fail: (err) => { 
                
				uni.hideLoading();
				console.log(err,"错误信息");
				if(err.errMsg == "request:fail timeout"){
					uni.showToast({
						icon:"none",
						title:"网络请求超时,请重试!",
						duration:2000
					});
					return
				}
				uni.showToast({
					icon:"none",
					title:"网络连接失败,请重试!",
					duration:2000
				})
				reject(err)
			}
		})
	})
}

创建api接口文件 index.js

import {myRequest} from "../server.js"

// 实列请求模块

// 首页Banner

export  const banner = data=>{
	 return myRequest({url:'/api/banner',data:data,methods:"GET"});
}

 页面调用
import {banner} from "@/api/index.js";
onLoad() {
	this.getbanner()
},
methods: {
	async getbanner(){
		let {data:data} = await banner()
		this.banner = data
	},
}

我一直用这套封装,简洁明了,分享出来备作参考吧,有不懂的可以问我

标签:uniapp,请求,title,res,request,Promise,uni,data
From: https://blog.csdn.net/2401_86332692/article/details/140888832

相关文章

  • 基于ssm+vue.js+uniapp的宠物领养系统附带文章和源代码部署视频讲解等
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • ES6新增内容 : Promise
    [学习文档] https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/PromisePromise对象首先明白同步与异步是什么:同步是指每项任务依次完成,前一项任务未结束无法执行后一项任务;异步指的是在执行一项任务时等待的空隙中,可以有办法继续执行其......
  • Java毕业设计基于微信小程序的在线学习和测试系统 Uniapp
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍随着信息时代的快速发展,互联网的优势和普及,人们生活水平的不断提高,工作时间的繁忙,使得在线学习平台的开发成为必需。在线学习平台主要是借助计算机,通过对在线学习平台管理所需的信......
  • 基于SpringBoot+Vue+uniapp的高校校园交友微信小程序(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的走失人员的报备平台(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的投票评选系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的学生签到系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的校园综合服务平台(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • uniapp__微信小程序实现二维码的生成
    uniapp__微信小程序实现生成二维码项目实战中比较常见,方便下次使用文章目录       一、插件地址?使用插件?       二、生成二维码?       三、定制封装二维码?       三、定制封装二维码?一、插件地址?使用......
  • Java毕业设计基于微信小程序的加油站加油管理系统 uniApp
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,加油服务系统被用户普遍使用,为方......