uniapp项目实战系列(4):服务的异步请求,请求服务的二次封装

news2025/1/17 3:18:09

目录

  • 系列往期文章(点击跳转)
    • uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管(点击跳转)
    • uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置(点击跳转)
    • uniapp项目实战系列(3):底部导航栏与头部导航栏的配置(点击跳转)
  • 1.介绍
  • 2.功能搭建流程
    • 2.1启动后端服务
    • 2.2请求获取轮播图数据
      • 2.2.1整体的请求
      • 2.2.3网络请求后立即回调(可以用于需要同步,一个接一个的调用)
      • 2.2.3异步async/awit网络请求
    • 2.3详细介绍es6的语法:aysnc/awit(了解可跳过)
      • 2.3.1.async/await的语法
      • 2.3.2.async/await的用法
      • 2.3.3.async/await的原理
      • 2.3.4.async/await的注意事项
    • 2.4uni.request网络请求的二次封装和全局挂载
      • 2.4.1编写api.js
      • 2.4.2在mian.js中进行导入和全局挂载
      • 2.4.3在请求轮播图数据中使用封装后的uni.request
    • 2.5利用获取到的数据渲染到页面上
    • 3.完整代码
    • 3.1.api.js:
    • 3.2main.js:
    • 3.3index.vue:


✨ 原创不易,还希望各位大佬支持一下!

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


系列往期文章(点击跳转)

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管(点击跳转)

uniapp项目实战系列(2):新建项目,项目搭建,微信开发工具的配置(点击跳转)

uniapp项目实战系列(3):底部导航栏与头部导航栏的配置(点击跳转)

1.介绍

本文主要是轮播图数据的请求与渲染和网络请求的封装
在本文章中学会在服务的异步请求,请求服务的二次封装

2.功能搭建流程

2.1启动后端服务

在这里插入图片描述需要注意的是后端服务的cmd不能关闭哦,关闭了就本地的后端服务就停止了

2.2请求获取轮播图数据

2.2.1整体的请求

下图为:未封装网络请求以及不进行异步操作的整个页面请求
在data中设置变量存放数据
在onLoad(页面加载时)设置获取轮播图数据的方法
在methods中编写请求轮播图数据的方法
uni.request:发起网络请求(文档地址)
uni.showToast:显示消息提示框(文档地址)
tips:
1.axios只有浏览器支持,为了用多端要用uni提供的请求了
2.uniapp App端没有浏览器对象,不支持axios,请用官方的API:uni.request() ,打开调试能用是因为调试的时候JS是在电脑运行的,而电脑带有浏览器端对象
3.localhost 的 IP 地址是 127.0.0.1,所以说http://127.0.0.1:8082=http://localhost:8082
4.设计稿是按照375px*2=750px,是2倍图,750rpx相当于设计稿的全部宽度,1px=2rpx

在这里插入图片描述

2.2.3网络请求后立即回调(可以用于需要同步,一个接一个的调用)

这个函数中,getSwipers()使用了标准的回调方式来处理异步请求。当uni.request()发起网络请求后,该函数会立即返回,然后在请求成功或失败后的回调函数中执行相应的逻辑。这种方式在早期的JavaScript中非常常见,但随着异步处理的需求越来越复杂,这种方式往往会导致代码变得难以管理和理解,因为它涉及到回调函数的嵌套和"回调地狱"等问题。
在这里插入图片描述

2.2.3异步async/awit网络请求

这个函数中,getSwipers()使用了ES6引入的async/await语法来处理异步请求。这种方式使得异步代码看起来更像同步代码,使得代码更容易理解和维护。
在这里插入图片描述

2.3详细介绍es6的语法:aysnc/awit(了解可跳过)

在JavaScript中,异步调用是一种在执行过程中暂停当前执行,等待某个操作完成后继续执行的方式。这种机制可以避免阻塞主线程,提高程序的性能。
在JavaScript中,常见的异步方式有回调函数、Promise、async/await等。其中,async/await是ES2017引入的一种基于Promise的异步方式,它更加简洁、易于理解和使用。

2.3.1.async/await的语法

async表示函数是异步的,await表示在函数内部等待某个异步操作完成。
示例代码:

async function asyncFunc() {  
  const result = await asyncOperation();  
  console.log(result);  
}

在上面的代码中,asyncFunc是一个异步函数,它内部调用了另一个异步函数asyncOperation,并使用await等待其完成。当await的表达式返回结果后,asyncFunc继续执行后续代码。

2.3.2.async/await的用法

async/await是基于Promise实现的,因此Promise的所有操作都可以使用async/await进行异步操作。
示例代码:

async function asyncFunc() {  
  try {  
    const result = await promise(); // 等待promise完成并返回结果  
    console.log(result);  
  } catch (error) {  
    console.error(error); // 处理promise抛出的错误  
  }  
}

在上面的代码中,我们使用了try…catch结构来处理Promise可能抛出的错误。在try块中使用await等待Promise完成,并在需要时处理返回的结果。如果Promise抛出错误,catch块会捕获并处理该错误。

2.3.3.async/await的原理

async/await是通过将Promise对象转换为生成器实现的。具体来说,当一个函数被声明为async时,JavaScript会将该函数转换为生成器函数,并在函数内部使用Promise对象进行异步操作。当await表达式等待Promise完成时,JavaScript会暂停当前生成器函数的执行,等待Promise完成并返回结果后继续执行生成器函数。这种机制使得异步操作更加简洁、易于理解和使用。

2.3.4.async/await的注意事项

只能在async函数内部使用await,否则会抛出错误。
await的表达式必须是Promise对象,否则会直接返回该表达式的值。
使用await时必须用try…catch结构处理Promise可能抛出的错误。
如果一个async函数没有return语句或者return了一个未经await的Promise对象,该函数将返回一个Promise对象,并且该Promise将在函数结束时resolve为undefined。

2.4uni.request网络请求的二次封装和全局挂载

2.4.1编写api.js

这段代码是用于创建HTTP请求的JavaScript函数。它使用了ES6的模块导出和箭头函数,并且使用了uni.request函数来发送请求。这是一个基于Promise的异步函数,它返回一个Promise对象。
1.const BASE_URL = ‘http://127.0.0.1:8082’:定义了一个常量 BASE_URL,它是一个基础的URL,这个URL会作为所有请求的起点。
2.export const myRequest = (options) => { … }:定义了一个名为 myRequest 的函数,并将它导出。这个函数接收一个对象 options 作为参数,该对象应该包含 url、method 和 data 属性。
3.return new Promise((resolve, reject) => { … }):在函数内部,创建了一个新的Promise对象,并返回它。Promise是一个用于处理异步操作的JavaScript对象。resolve 和 reject 是Promise对象的两个回调函数,当Promise的状态从pending变为fulfilled时,resolve 函数会被调用;当Promise的状态从pending变为rejected时,reject 函数会被调用。
4.uni.request({ … }):使用 uni.request 函数发送一个HTTP请求。这个函数应该是一个提供异步请求功能的库或者API的一部分。它接收一个包含多个属性的对象作为参数,包括请求的URL、请求的方法(默认为GET)、请求的数据等。
5.url: BASE_URL + options.url,:拼接基础URL和请求的URL,得到完整的请求URL。
6.method: options.method || ‘GET’, data: options.data || {}:如果 options 对象有 method 和 data 属性,则使用这些属性的值;否则,使用默认值 ‘GET’ 和一个空对象。
7.success: (res) => { … }, fail: (err) => { … }:这两个属性是 uni.request 的回调函数。如果请求成功,会执行 success 回调;如果请求失败,会执行 fail 回调。
8.if (res.data.status !== 0) { … }:在 success 回调中,检查响应的数据中的状态是否为0。如果状态不为0,表示获取数据失败,显示一个提示信息,并拒绝Promise。
9.resolve(res):如果获取数据成功,那么就通过 resolve 回调将响应的结果返回,使得Promise的状态变为fulfilled。
uni.showToast({ … }):这是一个自定义的函数,它可能用于在前端展示一个提示信息。
10.reject(err):如果请求失败,那么就通过 reject 回调将错误信息返回,使得Promise的状态变为rejected。
在这里插入图片描述

2.4.2在mian.js中进行导入和全局挂载

这段代码是用于在 Vue.js 中引入并设置一个全局的函数 m y R e q u e s t 。 myRequest。 myRequestmyRequest 函数在后续的 Vue.js 组件中可以直接调用。
1.import {myRequest} from ‘uni/api.js’:从 ‘uni/api.js’ 文件中引入 myRequest 函数。
2.Vue.prototype. m y R e q u e s t = m y R e q u e s t :将 m y R e q u e s t 函数赋值给 V u e 的原型对象。这意味着在所有的 V u e 组件中,都可以通过 t h i s . myRequest = myRequest:将 myRequest 函数赋值给 Vue 的原型对象。这意味着在所有的 Vue 组件中,都可以通过 this. myRequest=myRequest:将myRequest函数赋值给Vue的原型对象。这意味着在所有的Vue组件中,都可以通过this.myRequest 来调用这个函数。
在这里插入图片描述

2.4.3在请求轮播图数据中使用封装后的uni.request

在这里插入图片描述

2.5利用获取到的数据渲染到页面上

在这里插入图片描述

3.完整代码

3.1.api.js:

const BASE_URL = 'http://127.0.0.1:8082'
export const myRequest = (options) => {
  return new Promise((resolve, reject) => {
    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)
      }
    })
  })
}

这段代码是使用 JavaScript 编写的,并使用了一个叫做 uni 的库(通常在微信小程序等环境中使用)。它定义了一个名为 myRequest 的函数,该函数用于向指定的 URL 发送 HTTP 请求。
这个函数接收一个参数 options,该参数是一个对象,包含以下属性:

  • url: 请求的 URL。它将被添加到 BASE_URLhttp://127.0.0.1:8082)上。
  • method: 请求的 HTTP 方法,默认为 GET。
  • data: 要发送的数据,默认为空对象。
    函数返回一个 Promise,该 Promise 在请求成功时解析为响应,在请求失败时被拒绝。
    以下是函数的具体操作:
  1. uni.request 是一个函数,用于发送 HTTP 请求。它接收一个包含请求信息的对象作为参数。
  2. success 回调中,如果响应数据的 status 属性不等于 0,那么会显示一个错误提示('获取数据失败')。否则,将解析 Promise,并将响应作为结果返回。
  3. fail 回调中,无论请求是否成功,都会显示一个错误提示('请求接口失败'),并将错误拒绝到 Promise 中。

总的来说,这个函数提供了一种异步的方式去发送 HTTP 请求,并且对请求的成功和失败进行了基本的错误处理。

3.2main.js:

import {myRequest} from 'uni/api.js'
Vue.prototype.$myRequest = myRequest

这段代码是用于在 Vue.js 中引入并暴露 myRequest 函数的。
具体来说,它做了以下几件事:

  1. import {myRequest} from 'uni/api.js':这行代码从 ‘uni/api.js’ 文件中导入 myRequest 函数。这个文件可能包含了一些在 ‘uni’ 环境下使用的 API,例如在微信小程序中。
  2. Vue.prototype.$myRequest = myRequest:这行代码将 myRequest 函数添加到 Vue 的原型上,使得在任何 Vue 实例中都可以通过 this.$myRequest 来访问这个函数。这是一种常见的在 Vue.js 中添加全局函数或属性的方式。
    所以,现在你可以在任何 Vue 组件中使用 this.$myRequest 来调用 myRequest 函数,进行你的 HTTP 请求。

3.3index.vue:

<template>
  <view>
    <!-- 轮播图区域 -->
    <swiper :autoplay='true' :circular="true" >
      <swiper-item v-for="item in swipers" :key="item.id">
        <image :src="item.img"></image>
      </swiper-item>
    </swiper>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        swipers: [], //轮播图的数据
      }
    },
    onLoad() {
      this.getSwipers() //页面加载时获取轮播图的数据
    },
    methods: {
      //封装时异步获取数据
      async getSwipers() {
        const res = await this.$myRequest({
          url: '/api/getlunbo'
        })
        this.swipers = res.data.message
      },
    }
  }
</script>

<style lang="scss" scoped>
  swiper {
    height: 200rpx;
    image {
      width: 100%;
      height: 100%;
    }
  }
</style>

这是一个使用 Vue.js 构建的组件,该组件用于在页面上展示一个轮播图。
以下是代码的详细解释:

  1. <template> 部分,我们有一个 swiper 组件,这是一个轮播图组件。:autoplay='true' 表示轮播图将自动播放,:circular="true" 表示轮播图是循环播放的。
  2. 在每个 swiper-item 中,我们用 v-for 指令循环渲染 swipers 数组中的每个元素。每个元素都是一个轮播图项,其图片通过 :src="item.img" 绑定。
  3. <script> 部分,我们定义了一个 Vue 组件。这个组件有一个 data 函数,它返回一个对象,其中包含 swipers 数据。这个数组用来存储轮播图的数据。
  4. onLoad() 是一个生命周期钩子,当组件加载完成时,它将调用 getSwipers() 方法获取轮播图的数据。
  5. getSwipers() 方法使用 this.$myRequest() 发送一个 HTTP 请求到 ‘/api/getlunbo’ URL 来获取轮播图的数据。获取到的数据被赋值给 swipers
  6. 最后,在 <style> 部分,我们为 swiper 和其中的 image 元素定义了一些样式。轮播图的高度被设置为200rpx(可能是像素或者其他单位),图片的宽度和高度都被设置为100%,使得图片能完全填充其父元素。

总的来说,这是一个简单的轮播图组件,它通过异步获取数据并动态渲染轮播图项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Greenplum-segment镜像分布策略

Greenplum作为一款基于PostgreSQL的OLAP分布式MPP架构&#xff0c;其内部的角色可以通过配置冗余来保证高可用性&#xff0c;无论是管理节点还是计算节点。管理节点可以为Master配置一个Standby来保证高可用&#xff0c;而计算节点则可以为每个Primary segment配置一个对应的Mi…

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…

Java 多线程系列Ⅱ(线程安全)

线程安全 一、线程不安全线程不安全的原因&#xff1a; 二、线程不安全案例与解决方案1、修改共享资源synchronized 使用synchronized 特性 2、内存可见性Java内存模型&#xff08;JMM&#xff09;内存可见性问题 3、指令重排列4、synchronized 和 volatile5、拓展知识&#xf…

Python学习 -- 异常堆栈追踪技术

在编写Python代码时&#xff0c;出现异常是不可避免的。异常堆栈追踪是一种强大的工具&#xff0c;可以帮助我们定位错误发生的位置以及调用栈信息。Python的traceback模块提供了多种方法来获取和展示异常的堆栈信息。本文将详细介绍traceback模块中的print_exc()方法&#xff…

spring:事务失效+事务传播行为

一、事务失效 1.Transactional作用在非public上 Transactionalvoid transferAccounts(){adminDao.sub();System.out.println(10/0);adminDao.add();} 只执行sub&#xff08;&#xff09; 2.异常被try catch捕获 Transactionalpublic void transferAccounts(){adminDao.sub(…

vue3项目导入异常Error: @vitejs/PLUGIN-vue requires vue (>=3.2.13)

vue3项目导入异常 1、异常提示如下&#xff1a; failed TO LOAD config FROM D:\ws-projects\vite.co nfig.js error WHEN STARTING dev SERVER: Error: vitejs/PLUGIN-vue requires vue (>3.2.13) OR vue/compiler-sfc TO be pre sent IN the dependency tree.2、解决办法…

校园气象站的功能和作用

校园气象站是一种用于监测和记录气象数据的设备&#xff0c;下面将从功能和作用两个方面来详细介绍校园气象站。 一、校园气象站的功能 ①气象数据监测 校园气象站可以监测多种气象数据&#xff0c;包括温度、湿度、气压、风速、风向等。这些数据会通过4G方式上传至环境监控…

金蝶云星空二开,公有云执行SQL

功能背景&#xff1b; 金蝶公有云执行sql工具&#xff0c;因官方为云部署 用户无法连接数据库增删改查 天梯维护网页仅支持增删改操作 二开单据已支持根据sql动态生成单据体 与sql可视化界面操作一致 功能实现及场景&#xff1a; 1.可用于公有云执行sql类操作 2.私有云部署&am…

OB Cloud助力泡泡玛特打造新一代分布式抽盒机系统

作为中国潮玩行业的领先者&#xff0c;泡泡玛特凭借 MOLLY、DIMOO、SKULLPANDA 等爆款 IP&#xff0c;以及线上线下全渠道营销收获了千万年轻人的喜爱&#xff0c;会员数达到 2600 多万。2022 年&#xff0c;泡泡玛特实现 46.2 亿元营收&#xff0c;其中线上渠道营收占比 41.8%…

java 浅谈ThreadLocal底层源码(通俗易懂)

目录 一、ThreadLocal类基本介绍 1.概述 : 2.作用及特定 : 二、ThreadLocal类源码解读 1.代码准备 : 1.1 图示 1.2 数据对象 1.3 测试类 1.4 运行测试 2.源码分析 : 2.1 set方法解读 2.2 get方法解读 一、ThreadLocal类基本介绍 1.概述 : (1) ThreadLocal&#xff0c;本…

YOLO数据集划分(训练集、验证集、测试集)

1.将训练集、验证集、测试集按照7:2:1随机划分 1.项目准备 1.在项目下新建一个py文件&#xff0c;名字就叫做splitDataset1.py 2.将自己需要划分的原数据集就放在项目文件夹下面 以我的为例&#xff0c;我的原数据集名字叫做hatDataXml 里面的JPEGImages装的是图片 Annota…

安达发|APS软件排程规则及异常处理方案详解

随着科技的发展&#xff0c;工业生产逐渐向智能化、自动化方向发展。APS(高级计划与排程)软件作为一种集成了先进技术和理念的工业软件&#xff0c;可以帮助企业实现生产过程的优化和控制。其中&#xff0c;排程规则是APS软件的核心功能之一&#xff0c;它可以帮助企业合理安排…

港联证券|什么是北上资金?北上资金连续流入的股票好不好?

一般在股市收盘之后&#xff0c;公司会对当日的股市资金变化做一个资金总结&#xff0c;比如说北上资金的流入或许流出。那么什么是北上资金&#xff1f;北上资金连续流入的股票好不好&#xff1f;下面就由港联证券为大家剖析&#xff1a; 什么是北上资金&#xff1f; 北上资金…

Java on VS Code 8月更新|反编译器用户体验优化、新 Maven 项目工作流、代码高亮稳定性提升

作者&#xff1a;Nick Zhu 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 的 8 月更新&#xff01;在这篇博客中&#xff0c;我们将为您提供有关反编译器支持的更多改进。此外&#xff0c;我们将展示如何创建没有原型的 Maven 项目以及一…

LabVIEW计算测量路径输出端随机变量的概率分布密度

LabVIEW计算测量路径输出端随机变量的概率分布密度 今天&#xff0c;开发算法和软件来解决计量综合的问题&#xff0c;即为特定问题寻找最佳测量算法。提出了算法支持&#xff0c;以便从计量上综合测量路径并确定所开发测量仪器的测量误差。测量路径由串联的几个块组成&#x…

用于设计和分析具有恒定近心点半径的低推力螺旋轨迹研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ShardingJDBC——基于JPA的读写分离实战

摘要 本博文主要介绍基于JPA的读写分离实战&#xff0c;帮助大家更好的学会使用读写分离。透明化读写分离所带来的影响&#xff0c;让使用方尽量像使用一个数据库一样使用主从数据库集群&#xff0c;是ShardingSphere读写分离模块的主要设计目标。 一、读写分离库的场景和设计…

一文了解tcp/ip协议的运行原理

接触代理ip的人都了解https/sock5等ip协议&#xff0c;那么TCP/IP 协议又是什么&#xff1f; 一、什么是TCP/IP 协议&#xff1f; TCP/IP 协议实际上是一系列网络通信协议的一个统称&#xff0c;他负责具体的数据传输工作&#xff0c;核心的两个协议包括TCP以及IP&#xff0c…

启动服务报错:Command line is too long Shorten command line for xxx or also for Spri

ommand line is too long. Shorten command line for ProjectApprovalApplication or also for Spring Boot default configuration. 启动springboot 项目的时候报错 解决方案&#xff1a; 点击提示中的&#xff1a;default&#xff1a;然后在弹出窗口中选择&#xff1a;JAR xx…

Apache Struts2漏洞复现之s2-005漏洞复现

0x01 声明&#xff1a; 仅供学习参考使用&#xff0c;请勿用作违法用途&#xff0c;否则后果自负。 0x02 简介&#xff1a; Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI&#xff0c;鼓励开发者采用MVC架构…