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

模仿axios的封装效果来封装fetch,实现baseurl超时等

因为要在cocos游戏项目里面发送网络请求获取数据,并且还有可能用到websocket发送请求,所以这里封装一个fetch放便使用:

// fetch封装

// 基础配置
const BASE_URL = `你的url`
const TIMEOUT = 5000

// 请求封装
const http = async (url: string, options: RequestInit = {}): Promise<any> => {
    const controller = new AbortController()
    const timeoutId = setTimeout(() => controller.abort(), TIMEOUT)

    // 请求前置处理(请求拦截器)
    const finalOptions: RequestInit = {
        ...options,
        headers: {
            'Content-Type': 'application/json',
            ...(options.headers || {}),
        },
        signal: controller.signal,
    }

    try {
        const response = await fetch(BASE_URL + url, finalOptions)
        clearTimeout(timeoutId)
        const data = await response.json()
        // 响应拦截器逻辑
        if (data.code === 401) {
            if (window.location.href.indexOf('pad') !== -1) {
                return Promise.resolve({
                    code: 200,
                    data: { msg: '登录无效' },
                })
            } else {
                console.log('登录无效')
                return Promise.reject({
                    code: 401,
                    data: { msg: '登录无效' },
                })
            }
        } else if (data.code >= 400) {
            console.log('请求失败')
        }

        return Promise.resolve(data)
    } catch (error: any) {
        if (error.name === 'AbortError') {
            console.log('请求超时')
        } else {
            console.error('请求失败:', error)
            console.log('请求失败')
        }
        return Promise.reject(error)
    }
}

export default http

 

使用的时候:

import http from './request'

export const getSelects = async () => {
    const data = await http('/carnival/clock_api/getlevelselect', {
        method: 'GET',
    })
    console.log('data--', data)
}

在cocos启动的时候就执行:

相关文章:

  • 批量将图片转换为 jpg/png/Word/PDF/Excel 等其它格式
  • 【ROS 通信】Services 服务通信
  • pinia中不定义state和action也能正常使用属性和方法
  • [Effective C++]条款28:避免返回handles指向对象内部成分
  • AI 智能外呼系统的智能体现
  • Python语言的网络编程
  • 大模型FAQ
  • C++-Mongoose(2)-https-server-openssl
  • Java核心技术面试题
  • micro ubuntu 安装教程
  • 【亲测】Linux 使用 Matplotlib 显示中文
  • Solidity入门实战—web3
  • 【Ansible自动化运维】一、初步了解,开启自动化运维之旅
  • STM32定时器完全指南:从基础原理到高级应用 | 零基础入门STM32第九十六步
  • 海外高防服务器延迟优化——跨国业务安全加速的底层逻辑
  • DIY AI ML:K-Means 算法
  • HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
  • R语言 | 2d概率密度分布图
  • 牛客 226303 【模板】差分
  • SPI通信
  • 网站用自己的电脑做服务器吗/国内网站排名
  • 有名做网站公司/百度有专做优化的没
  • 在线做logo印章网站/百度图片搜索图片识别
  • 网站推广软文案例/百度竞价冷门产品
  • 要做网站照片怎么处理/上街网络推广
  • 网站建设 风险说明/google浏览器官网