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 更

文件目录结构如下:

fly.js代码如下:

import Fly from 'flyio/dist/npm/wx' // 根据不同的环境引入不同的包
// #ifdef H5  // 只有H5平台支持
import Fly from 'flyio/dist/npm/fly'
// #endif
// #ifndef H5 //除去H5平台以外的 如:微信小程序和APP版本
import Fly from 'flyio/dist/npm/wx'
// #endif
//该位置可根据不同运行环境进行判断
let baseUrl = 'http://116.141.0.158:8083/'// 创建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) => {// 给所有请求添加自定义headerif (request.headers.needIntercept === true && isPending(request.url)) {// 请求重复,终止let err = new Error('重复请求已被拦截')err.request = requestreturn 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) { // 如果需要显示loadingwx.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} else {// 如果请求不成功,抛出错误。如返回 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  是否需要添加拦截*/
let Authorization = `9j8yMV ada46702b50d20fe9415e915a1963751`
const request = (url, params, method) => {let res = fly.request(url, params, {method: method, // 请求方法baseURL: baseUrl, // 请求基地址timeout: 1000 * 30, // 超时时间 30sheaders: { // 请求头Authorization,// needLoading:needLoading, // 自定义请求头配置 => 是否需要loading// needIntercept:needIntercept,// Accept: 'application/json','Content-Type': 'multipart/form-data',}})return res
}
export default request

api.js代码如下:


import request from './fly'
export default {    async getNewsData (param) {const methodType = 'POST';const url = 'mobile-portal/task/sync.vm';return request( url, param, methodType);},
}

调用fly方法

import http from '@/static/js/api.js'    http.getNewsData(data)

详细文档:https://github.com/wendux/fly

fly.js 的二次封装相关推荐

  1. 高德地图markevents_GitHub - mingxuWang/Map: 高德地图API二次封装

    Map组件设计文档 组件设计目的 分析当前各业务方向(销售端.商城.数据可视化.TMS)内地图相关应用的地图功能使用情况,封装Map组件供给各业务向进行使用. 将高德地图API进行二次封装,降低地图相 ...

  2. vue全家桶 ---axios的使用和二次封装

    1.前提基础 本文在vue项目搭建的基础上,vue-router路由配置的基础上,对vue项目中axios的使用进行介绍. 2.axios的使用以及拦截器的设置. 安装axios cnpm i axi ...

  3. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)...

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js 1 function ajax( ...

  4. 微信小程序 对request方法二次封装

    微信小程序跟支付宝小程序都提供了一个发起 HTTPS 网络请求的方法request,那么为了节省一些操作我们有必要对它进行一个二次的封装 1.在app.js里 配置baseUrl // 注册一个小程序 ...

  5. python+selenium十:selenium的二次封装

    python+selenium十:基于原生selenium的二次封装 from selenium import webdriverfrom selenium.webdriver.support.wai ...

  6. 二次封装arcgis的timeslider

    arcgis的timeslider是对dojo slider二次封装, 项目需要,所有Map用统一样式的slider,所以写了一个common的dojo class,统一调用生成slider,作为对t ...

  7. 二次封装dojo slider

    上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的. 实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标 ...

  8. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  9. Vue二次封装axios为插件使用

    照例先贴上 axios 的 gitHub 地址 不管用什么方式获取数据,对于一个项目来说,代码一定要利于维护其次是一定要写的优美,因此加上一层封装是必要的 vuejs2.0 已经不再维护 vue-re ...

最新文章

  1. 源码编译安装httpd及其常见错误
  2. 数据架构简史:转换中的范式
  3. Android PullToRefreshListView和ViewPager的结合使用
  4. C++(Windows下计算时间变化(时间差))
  5. matlab求实根,用弦截法任意实数方程求实根 用matlab 语言编程
  6. TCSVT | 横看成岭侧成峰:交叉视角地理定位
  7. coreos 安装mysql_如何执行CoreOS Linux的裸机安装
  8. leetcode-卡车加气走环
  9. Microsoft SignalR Map Controller具有页面可见性API和事件模糊功能,可映射文档管理系统(DMS)中的用户交互
  10. vue如何编写组件可以通过Vue.use()使用
  11. w3school JavaScript笔记2 ——JavaScript HTML DOM
  12. 序章:企业潜规则认知
  13. 苹果mac电脑的end 键和home键在哪
  14. 商品订单管理系统(参考答案)
  15. C#理论 —— 文件操作、委托和事件
  16. 【开关电源】降压变换器(BUCK)的断续模式建模
  17. 通过创建script标签来引入外部js
  18. 西行漫记(7):再论语法糖
  19. sja1c语言,A1SJ71AP21-S3基础知识三菱A1SJ71AP21-S3用户手册(硬件) - 广州正凌
  20. 中国矿业大学教务系统服务器,中国矿业大学教务系统入口:http://jwb.cumt.edu.cn/...

热门文章

  1. BlueJ MenuetOS
  2. 获得资源配置文件的路径
  3. 牛逼哄哄的数据库连接池,底层原理是个啥?
  4. python报KeyError: ('Age', 'occurred at index PassengerId')错误
  5. 常见的各种字幕内容总结(字幕基础、字幕介绍、字幕种类及常见格式、SRT+ASS+LYC等等)
  6. 第一部分 python基础部分
  7. mybatisPlus实现创建时间、更新时间自动添加
  8. App UI设计:“看得见”有多重要
  9. gee引擎修改UI界面图文教程
  10. 如何知道PDF是不是正常的A4大小尺寸?