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

微信小程序promise封装

一. 在utils文件夹内创建一个request.js  写以下封装的 wx.request() 方法

const baseURL = 'https:// +  '域名' '; //公用总路径地址
export const request = (params) => {      //暴露出去一个函数,并且接收一个外部传入的参数let dataObj = params.data || {};   //拿到传递进来的参数let headerObj = {                  //这里 可以添加一些请求头'content-type': 'application/json'}return new Promise((resolve, reject) => {  //通过 Promise 对 wx.request 方法进行异步处理。wx.request({url: baseURL + params.url,      //通过默认的请求地址,再加上外部传入的 具体业务地址,组成一个完整的 请求地址。method: params.method || "GET",   //外部 业务调用请求时,并传入 所需的请求方法,如果没有传递请求方法,则默认为 GET 请求data: dataObj,                  //这里的参数,来自于外部传入的参数header: headerObj,success: res => {if (res.statusCode === 200) {resolve(res);                    // 请求成功后,调用 Promise 的回调 resolve() 方法,将参数返回出去到 Promise 的实例对象身上。wx.showToast({title: "请求成功",icon: "success"})return;} else {wx.showToast({title: "请求失败",icon: "error"})reject(res);    //同样请求失败后,向 Promise 实例返回出 错误的信息}},// fail: err => {//   reject(err)    //同样请求失败后,向 Promise 实例返回出 错误的信息// }})})
}

 二 . 在项目中,新建一个 API文件夹,用来做请求接口 模块化管理,这么做的原因是,虽然我们的请求接口封装了,但是整个项目中,调用接口的地方太多了,如果直接在各自页面中调用,也会显得代码十分的庸杂,所以不同的功能模块接口调用,为了避免混淆在一起,建议将api 请求接口 抽离出去,这样一来,页面的 js 部分就只着重于对发起请求前和请求响应后的数据逻辑处理。

api/index/js

import { request } from "../utils/request";  //导入我们封装的请求方法。//首页请求接口
export const index = (params) => {     //接收页面调用传递过来的参数return request({   //调用请求方法url: "/api/science/index",   //传入请求地址method: "GET",               //传入请求方法data : params                //这里的参数来自于页面调用时,传过来的参数  })
}

三 . 必须配置服务器白域名 必须是https开头的

最后:在页面中,调用上述模块中相应的 api 接口,将参数依次传递过去,同时由于我们的请求方法是采用了 Promise 的方式封装的,所以在页面逻辑调用时,还可以 使用 async 和 await 的方式,将异步代码做同步化处理。

// const { from } = require("form-data");
import {index} from '../../api/index.js';// pages/demos/demos.js
Page({/*** 页面的初始数据*/data: {},async getdatas() {let parameter = {}         //页面中,收集处理好,要传递的参数let data = await index(parameter);console.log(data);//data 身上就可以直接拿到,请求回来的数据。// if (data.statusCode === 200) {//   wx.showToast({//     title: "首页加载成功",//     icon: "success"//   })// }},/*** 生命周期函数--监听页面加载*/onLoad(options) {this.getdatas();},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

原创作者:吴小糖

创作时间:2023.12.22

http://www.lryc.cn/news/266547.html

相关文章:

  • hash长度扩展攻击
  • 设计模式--命令模式
  • 单例模式的七种写法
  • ElasticSearch入门介绍和实战
  • 【FPGA】分享一些FPGA视频图像处理相关的书籍
  • AUTOSAR从入门到精通-车载以太网(四)
  • MySQL报错:1054 - Unknown column ‘xx‘ in ‘field list的解决方法
  • 【Android 13】使用Android Studio调试系统应用之Settings移植(四):40+个依赖子模块之ActionBarShadow
  • nosql-redis整合测试
  • 智能化中的控制与自动化中的控制不同
  • java练习题之多态练习
  • [原创][R语言]股票分析实战[4]:周级别涨幅趋势的相关性
  • esp32使用lvgl,给图片取模显示图片
  • R语言使用scitb包10分钟快速绘制论文基线表
  • 类和对象
  • Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略
  • STM32G4x FLASH 读写配置结构体(LL库下使用)
  • 【AI提示词人物篇】创新艺术未来,让科技改变想象空间
  • 登录shell与非登录shell、交互式与非交互式shell的知识点详细总结
  • 【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)
  • 轻量Http客户端工具VSCode和IDEA
  • 机器学习或深度学习的数据读取工作(大数据处理)
  • Rust 生命周期
  • 【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision
  • 在Linux上安装CLion
  • R语言贝叶斯网络模型、INLA下的贝叶斯回归、R语言现代贝叶斯统计学方法、R语言混合效应(多水平/层次/嵌套)模型
  • 多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测
  • Oracle 学习(1)
  • 华为HCIA认证H12-811题库新增
  • Nginx Unit 1.27.0 发布