封装小程序request请求[接口函数]

news2024/7/6 18:57:11

         在这篇小程序API的Promise化文章中讲到小程序官方提供的异步API都是基于回调函数来实现的,在大量的使用这种回调函数就会造成回调地狱的问题,以及代码的可读性和可维护性差,通过对小程序API的Promise化能解决,那么本篇是来讲进行对微信小程序网络数据请求的接口请求封装。

封装小程序 request 请求

        在 /utils 目录下创建 request.js 文件进行小程序request请求的封装:

// 封装数据请求request
const BASE_URL = '';  // 基础地址

export default function request(url,params={}){
  return new Promise((resolve,reject)=>{
  wx.showLoading({  // 请求提示
    title: '正在加载中...',
  })
  wx.request({
    url: BASE_URL + url,  // 请求url地址
    data: params.data || {},  // 请求参数
    header: params.header || {},  // 请求头
    method: params.method || 'GET', // 请求方式
    dataType: 'json', // 返回数据类型
    success: (res)=> { // 成功调用
      wx.hideLoading(); // 关闭请求提示
      resolve(res.data) // 成功处理res.data中的数据
    },
    fail: (err)=> { // 失败调用
      wx.hideLoading(); // 关闭请求提示
      wx.showToast({  // 提示错误信息
        title: err || '请求错误!',
      })
      reject(err) // 失败处理err
    }
  })    
})
}

        对于request的网络数据请求的封装并没有那么的复杂,加上一些注释小白应该可以更容易理解,在未 return new Promise(..) 之前返回的是一个Promise对象,这时可以再 new 一个Promise拿到数据,它有两个参数,两个参数分别又是函数,即高阶函数;请求之前使用wx.showLoading提示请求在加载中,通过wx.request发起数据请求,与基础地址BASE_URL拼接,通过data接收传入参数,header、method同理,success成功调用关闭掉请求提示交给resolve处理成功结果,fail失败调用关闭掉请求提示,同时需要提示用户请求错误的信息后交给reject处理失败结果;

如何来调用封装的request请求呢?

        首先先来准备一下数据请求的测试接口,这里通过本地Node.js搭载的服务器提供的API接口进行测试:

        测试接口已经准备完成,设置一下 BASE_URL 基础地址为 http://127.0.0.1:3000;

const BASE_URL = 'http://127.0.0.1:3000'

         这里需要设置【选中】微信小程序开发者工具中的【详情】- 【不校验合法域名...】这项;

        在 index.wxml 中设置一个按钮:

<button bindtap="handleClick">request请求</button>

        在 index.js 中引入封装request数据请求文件,并编写按钮的触发事件 handleClcik:

// index.js
const app = getApp()
import request from '../../utils/request'
Page({
    handleClick(){
        request('/api/navList').then(res=>{
            console.log(res);
        })
    }
})

封装各数据接口请求函数

        项目中用着许许多多的接口数据请求,此时对于这些接口函数进行封装处理,使用的时候可以直接来导入使用;

        创建 /util/api.js 文件封装各接口请求函数的文件:

// 引入封装request请求函数
import request from './request'
// 获取swiperList数据
export const reqSwiperList = () => request('/api/swiperList')
// 获取navList数据
export const reqNavList = () => request('/api/navList')
// 获取category数据
export const reqCategory = () => request('/api/category')

        下面在 index.js 中的onLoad中来调用使用:

...
 onLoad:function(){
    reqSwiperList().then(res=>{console.log('reqSwiperList',res)});
    reqNavList().then(res=>{console.log('reqNavList',res)});
    reqCategory().then(res=>{console.log('reqCategory',res)});
 }
...

 async 和 await 

        通过 async 和 await 的写法会比使用 .then(res=>{}) 的这种方式更加简练一些;下面来将 handleClick 中的请求函数做一个变更:

handleClick(){
    reqSwiperList().then(res=>{
        console.log(res);
    })
}

        使用 async 和 await 写法:

async handleClick(){
    const res = await reqSwiperList()
    console.log(res)
}

        以上就是封装小程序request数据请求和封装各接口数据请求函数的内容;可以在你的小程序项目当中去使用,封装小程序的request请求和封装各接口请求,可以让你在小程序项目中更上一层!感谢大家的支持!!!

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

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

相关文章

203. 移除链表元素 L2-027 名人堂与代金券

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#…

内网离线安装docker-ce工具,带你来了解!

虽然通常我们都是使用网络来安装 docker 的&#xff0c;但是对于安全要求比较高的业务或者用户来说&#xff0c;部署产品需要在内网部署&#xff0c;而内网通常是无法访问外部网络的&#xff0c;所以就需要通过内网进行安装了。 1. yum 离线安装包获取方法 下载软件包 这里以…

语义分割数据标注案例分析

语义分割&#xff08;Semantic Segmentation&#xff09;是计算机视觉领域中的一种重要任务&#xff0c;它的目的是将图像中的每个像素分配到对应的语义类别中。简单来说&#xff0c;就是将一张图像分割成多个区域&#xff0c;并为每个像素指定一个标签&#xff0c;标识出它属于…

实时手势识别(C++与python都可实现)

一、前提配置&#xff1a; Windows&#xff0c;visual studio 2019&#xff0c;opencv&#xff0c;python10&#xff0c;opencv-python&#xff0c;numpy&#xff0c;tensorflow&#xff0c;mediapipe&#xff0c;math 1.安装python环境 这里我个人使用的安装python10&#…

MySQL进阶篇之MySQL管理

07、MySQL管理 7.1、系统数据库 MySQL数据库安装完成后&#xff0c;自带了四个数据库&#xff0c;具体作用如下&#xff1a; 数据库含义mysql存储MySQL服务器正常运行所需要的各种信息&#xff08;时区、主从、用户、权限等&#xff09;information_schema提供了访问数据库元…

科技赋能智慧警务,“链上天眼科技助警中国行”在京启动

2月28日&#xff0c;由全球领先的区块链大数据科技企业欧科云链和中国警察网联合举办的“链上天眼科技助警中国行”活动&#xff08;下称“活动”&#xff09;&#xff0c;在北京正式启动。为了普及区块链基础知识&#xff0c;以及虚拟货币犯罪追踪与打击的新型技术应用经验&am…

(三)随处可见的LED广告屏是怎么工作的呢?接入GUI

续上文&#xff0c;本篇我们将尝试接入一个GUI来控制点阵屏。在前两篇中&#xff0c;我们相继介绍了点阵屏的控制原理&#xff0c;以及如何让点阵屏按照我们所想的进行显示。本篇将在此基础上接入一个GUI&#xff0c;使点阵屏的控制更加优雅。限于阅读体验和展示效果&#xff0…

王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “计算机网络体系结构” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络…

SpringMVC之JSON工具:Jackson Gson 和fastjson通过JSON工具来解决文字乱码和时间格式问题——通过JSON工具生成JSON

什么是Json&#xff1f; JSON&#xff1a;JavaScript Object NotationJS对象 它是一种轻量级的数据交换格式JSON&#xff08;当前是交互的顶流&#xff09;&#xff0c;它自身具有独立的编程格式&#xff0c;它的特点是简洁和清晰&#xff0c;Json的存在大大改造了网络传输的…

ffmpeg音视频解码和渲染流程

背景&#xff1a; 随着游戏娱乐等直播业务的增长&#xff0c;在移动端观看直播的需求也日益迫切。但是移动端原生的播放器对各种直播流的支持却不是很好。Android 原生的 MediaPlayer 不支持 flv、hls 直播流&#xff0c;iOS 只支持标准的 HLS 流。本文介绍一种基于 ffplay 框…

挑选销售自动化工具应该关注什么功能?

销售自动化可以极大地提高你的生产力和效率&#xff0c;每周都为你节省时间。这样&#xff0c;你就可以把更多的时间用于完成交易&#xff0c;而减少用于行政任务的时间。市面上的销售自动化工具有很多&#xff0c;作为一般经验法则&#xff0c;以下是销售自动化工具中需要寻找…

智能家居Homekit系列一智能插座

WiFi智能插座对于新手接触智能家居产品更加友好&#xff0c;不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷&#xff0c;智能插座就是其中之一&#xff0c;比如外出忘记关空调&#xff0c;可以拿起手机远程关闭。 简单说就是&#xff1a;插座可以连接wi…

【微信小程序】-- WXML 模板语法 - 列表渲染 -- wx:for wx:key(十二)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

Web前端学习:四 - 练习

三九–四一&#xff1a;百度页面制作 1、左右居中&#xff1a; text-align: center; 2、去掉li默认的状态 list-style: none; li中有的有点&#xff0c;有的有序&#xff0c;此代码去掉默认状态 3、伪类&#xff1a;hovar 一般显示为color: #0f0e0f&#xff0c; 当鼠标接触时…

【JAVA程序设计】【C00107】基于SSM(非maven)的民宿短租管理系统——有文档

【C00107】基于SSM&#xff08;非maven&#xff09;的民宿短租管理系统——有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架非maven开发的民宿短租管理系统分为二种用户&#xff1a;系统管理员、用户 管理员角色包含以下功能&#xff1a; 用户管理、客房…

本地新项目上传到git的详细步骤

前提&#xff1a;你本地的项目目录里要记得添加.gitignore忽略文件&#xff0c;免得把一些无用的文件提交&#xff0c;内容如下&#xff0c;可直接粘贴&#xff1a; # Created by .ignore support plugin (hsz.mobi) ### Java template # Compiled class file *.class# Log fi…

Python不同版本之间的切换方法

在使用Python的过程中难免会遇到不同的项目使用不通同的Python环境&#xff0c;这就引出Python环境的切换问题 这篇文章以3.11.0与3.10.10之间的版本切换为列讲述 首先我自己的电脑上同时安装了这两个版本的Python&#xff0c;并且都已经配置了环境变量 1.两个版本的Python …

cast提前!最简单有效的神经网络优化方法,没有之一!

做优化有时候真的很头疼&#xff0c;绞尽脑汁的想怎么做算法等价&#xff0c;怎么把神经网络各层指令流水起来&#xff0c;在确保整网精度的同时&#xff0c;又有高性能。 但有时做了半天&#xff0c;却发现流水根本就流不起来&#xff0c;总是莫名其妙地被卡住。 真的是一顿…

[Java多线程 1] 多线程基础

在Java 技术中&#xff0c;多线程依旧是一个离不开的话题&#xff0c;掌握多线程才能对一些高并发技术理解透彻。同时多线程也需要有一定的操作系统基础&#xff0c;在其理论上进行学习&#xff0c;会对调度情况、线程情况有更多的了解。当然这一块也常常作为Java面试的重点&am…

HNU工训中心:元器件及测量基础实验报告

工训中心的牛马实验 1.实验目的 1.熟悉测量验证常用元器件参数、 并采用替代法(测量回路电流)测量其伏安特性的方法。 2.熟悉测量误差及减小测量误差注意事项 2.实验仪器和器材 1.实验仪器. 直流稳压电源型号:IT6302 台式多用表型号:UT805A 2.实验( 箱)器材 电路实验箱…