独特的微信号_uniapp和原生小程序混合开发

独特的微信号_uniapp和原生小程序混合开发flyio是什么?一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用。flyio的平台支持?目前Fly.js支持的平台包括:Node.js、微信小程序、Weex、ReactNative、QuickApp和浏览器,这些平台的JavaScrip…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

flyio 是什么? 

        一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用。

flyio 的平台支持?

        目前Fly.js支持的平台包括:Node.js 、微信小程序 、Weex 、React Native 、Quick App 和浏览器,这些平台的 JavaScript 运行时都是不同的。相比较于axios,flyio支持更多的平台。

和axios有什么区别?

        1. flyio 能更好的支持小程序,而 axios 更通用一些

        2. flyio 相比较于 axios 体积更小,在小程序最多8M(分包,单包最多2M)的情况下,flyio 更适用与微信小程序

        3. 详细对比:与axios和Fetch对比

注意:

        本文章的封装代码只针对于微信小程序,如果需要在其他平台适用,本文章只做参考,请在阅读 flyio 文档后自行修改!

        vue 项目可参考:Axios在vue项目中的二次封装解析

        flyio 文档:Flyio帮助文档

 

封装完整代码:

import Fly from 'flyio/dist/npm/wx'

let baseUrl = 'https://fy.sysssc.com:9090/xgfy'

// 创建fly实例
let fly = new Fly()

// 正在请求的 url 数组
let pendingArr = []
// 获取正在请求/响应的请求索引
let pendingIndex = url => pendingArr.findIndex(item => item.url === url)
// 判断是否正在请求
let isPending = url => {
  return pendingIndex(url) > -1      // 当前url正在请求中
}
// 移除完成的请求
let removePending = url => {
  pendingArr.splice(pendingIndex(url), 1)
}
// pending数组中是否含有还在进行且需要loading的request
let hasPendingWithLoading = () => {
  return Boolean(pendingArr.filter(item => item.headers.needLoading).length)
}

// 添加请求拦截器
fly.interceptors.request.use((request) => {
  // 给所有请求添加自定义header
  if (request.headers.needIntercept === true && isPending(request.url)) {
    // 请求重复,终止
    let err = new Error('重复请求已被拦截')
    err.request = request
    return Promise.reject(err)
  }
  wx.getNetworkType({ // 每次请求时判断网络是否有问题
    complete: function (res) {
      if (res.networkType === 'none' || res.networkType === 'unknown') {
        wx.showToast({
          title: '网络不稳定,请检查网络',
          icon: 'none',
          mask: true,
          duration: 5000
        })
        return false
      }
    }
  })
  pendingArr.push(request)
  if (request.headers.needLoading === true) {  // 如果需要显示loading
    wx.showLoading({
      title: '正在加载..',
      mask: true
    })
  }
  return request
})

// 添加响应拦截器,响应拦截器会在then/catch处理之前执行
fly.interceptors.response.use((response) => {
  removePending(response.request.url)
  !hasPendingWithLoading() && wx.hideLoading()    // 没有正在请求并且需要显示loading的,关闭loading显示
  if (Number(response.data.code) === 0) {
    // 请求成功后,只将请求结果的data字段返回
    return response.data
  }
  // 如果请求不成功,抛出错误。如返回 500,401等
  // return Promise.reject(new Error(response.data.msg || '系统错误,请联系管理员!'))
  wx.showToast({
    title: response.data.msg || '系统错误,请联系管理员!',
    icon: 'none',
    mask: true,
    duration: 3000
  })
}, (err) => {
  // 发生网络错误后会走到这里
  removePending(err.request.url)
  wx.hideLoading()    // 网络错误,关闭loading
  // return Promise.reject(new Error('系统错误,请联系管理员!'))
  wx.showToast({
    title: '系统错误,请联系管理员!',
    icon: 'none',
    mask: true,
    duration: 3000
  })
})

// 请求配置
/**
 * @param {*} url 请求接口
 * @param {*} params 请求参数
 * @param {*} method 请假方式 GET / POST
 * @param {*} needLoading  是否需要loading
 * @param {*} needIntercept  是否需要添加拦截
 */
const request = (url, params = {}, method = 'POST', needLoading = true, needIntercept = true) => {
  let res = fly.request(url, params, {
    method, // 请求方法
    baseURL: baseUrl, // 请求基地址
    timeout: 1000 * 30, // 超时时间 30s
    headers: { // 请求头
      needLoading, // 自定义请求头配置 => 是否需要loading
      needIntercept
    }
  })
  return res
}
export default {
  request
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197541.html原文链接:https://javaforall.net

(0)
上一篇 2025年9月1日 下午9:22
下一篇 2025年9月1日 下午10:01


相关推荐

  • docker 安装 Nginx 并配置反向代理

    docker 安装 Nginx 并配置反向代理1 安装 nginxdocker 镜像获取 nginx 官方镜像 dockerpullng 查看镜像库 dockerimages 使用 nginx 镜像来创建 nginx 容器实例 dockerrunnam test p80 80 dnginxrun 创建容器实例 name 容器命名 v 映射目录 d 设置容器后台运

    2026年3月26日
    1
  • 记忆化搜索简介「建议收藏」

    记忆化搜索简介「建议收藏」记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。

    2022年7月26日
    9
  • 论概率:从局部随机性到整体确定性

    论概率:从局部随机性到整体确定性概率论与数理统计概率计算三原则学概率论拼的不是数学,而是语文能力独立性条件概率与贝叶斯公式全概率公式 概率计算三原则所有概率问题,都基于三个计算法则:加法法则:如果事件A和事件B相互排斥,而事件A有p种产生方式,事件B有q种产生方式,则事件”A或B”有p+q种产生方式。乘法法则:如果事件A和事件B相互独立,且事件A有p种产生方式,事件B有q种产生方式,则事件”A与B”有p*q种产生方式。.

    2022年5月30日
    43
  • formidable基本使用

    formidable基本使用用途 解析表单 支持 getpost 请求参数 文件上传等 基本使用步骤 下载 fomidable 模块 2 引入 formidable 模块 constformida require formidable 创建解析对象 constform newformidabl IncomingForm 设置文件上传路径 form uploadDir

    2026年3月19日
    1
  • C#实现一个局域网文件传输工具

    C#实现一个局域网文件传输工具工作需要,经常会在工作的台式机和笔记本之间传文件或者需要拷贝文本,两个机器都位于局域网内,传文件或者文本的方式有很多种,之前是通过共享文件夹来进行文件的拷贝,或者通过SVN进行同步。文本传递比较简单,可以通过两台机器上装QQ登两个号码,或者在共享目录下建一个TXT,或者发电子邮件等等。不过上面这些方法总觉得不直接,所以想基于P2P做一个小的局域网文件和文字传输小工具。WinForm的工程,

    2022年6月3日
    42
  • 从Java培训班出来后是怎么找到工作的?

    从Java培训班出来后是怎么找到工作的?经常听到有人抱怨,我参加过IT培训,公司一看我的简历就直接pass我了,把培训经历去掉后,面试通知是多了,但是往往面试完,就不了了之了,难道我参加过培训,公司就不会选择我了吗?一些企业有点排斥培训班出来的,他们排斥的原因相信大家都知道,主要是简历过度包装,面试都会一上手就废而且现在相当多的公司,会选择在培训机构培训过的程序员,很多公司会去到相关培训机构做双选会,直接挑选适合本公司职位的学员,即能快速了解此人的技术水平,还能很直观的了解到他的学习水平。没有一个企业喜欢学习能力差的人,你可以在进公司的时

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号