安装依赖

执行以下命令安装Flyio

为什么使用Flyio ? 因为能够跨端使用。

  1. yarn add flyio

添加请求拦截文件,使用请求时引入

  1. import Taro, { showToast, hideLoading } from "@tarojs/taro";
  2. import Fly from "flyio/dist/npm/wx"; // 根据环境进行修改不同的包
  3. import store from "../store"; // 你可能需要拿到获取公共数据进行判断
  4. const request = new Fly();
  5. const baseURL = "http://localhost:3000";
  6. request.config.timeout = 10000; // 超时时间
  7. request.config.baseURL = baseURL;
  8. const whiteUrl = ['']; // 不拦截的请求url
  9. // 发送请求之前拦截
  10. request.interceptors.request.use(async config => {
  11. if (!whiteUrl.includes(config.url)) {
  12. showToast({
  13. title: "加载中...",
  14. mask: true,
  15. icon: "loading"
  16. });
  17. }
  18. const AccessToken = store.getState().user.token; // 如果已登陆,请带上token
  19. config.headers = {
  20. ...config.headers,
  21. Accept: "application/json",
  22. "content-type": "application/json; charset=utf-8",
  23. Authorization: AccessToken && AccessToken.AccessToken
  24. };
  25. config.body &&
  26. Object.keys(config.body).forEach(val => {
  27. if (config.body[val] === "") {
  28. delete config.body[val];
  29. }
  30. });
  31. config.body = {
  32. ...config.body
  33. };
  34. return config;
  35. });
  36. request.interceptors.response.use(
  37. // 处理请求返回数据,如处理返回结构
  38. response => {
  39. hideLoading();
  40. return response.data;
  41. },
  42. // 错误时的处理
  43. async err => {
  44. try {
  45. const currentUrl = Taro.getCurrentPages()[ //获取当前页面路径
  46. Taro.getCurrentPages().length - 1
  47. ].route;
  48. // 根据业务需求处理err
  49. } catch (e) {
  50. showToast({ title: '错误信息=>', mask: true, icon: "none" });
  51. throw e;
  52. } finally {
  53. setTimeout(() => {
  54. hideLoading();
  55. }, 3000);
  56. }
  57. }
  58. );
  59. export default request;

你可能需要

  1. const newRquest = new Fly();
  2. // 锁定请求
  3. fly.lock(); // 锁住请求,暂时阻止放下走,不执行其他请求
  4. fly.unlock() // 解锁请求,将请求解锁,继续往下走