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

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

javascript 复制代码
// 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

使用的时候:

javascript 复制代码
import http from './request'

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

在cocos启动的时候就执行:

相关推荐
苏打水com5 小时前
第十五篇:Day43-45 前端性能优化进阶——从“可用”到“极致”(对标职场“高并发场景优化”需求)
前端·css·vue·html·js
布茹 ei ai1 天前
7、基于GEE 平台的 VIIRS 夜间灯光监测工具
云计算·js·遥感·gee
lxh01132 天前
二叉树中的最大路径和
前端·算法·js
心.c2 天前
初步了解Next.js
开发语言·前端·javascript·js
苏打水com5 天前
第十篇:Day28-30 工程化优化与部署——从“能跑”到“好用”(对标职场“项目上线”需求)
前端·css·vue·html·js
RollingPin6 天前
React Native与Flutter的对比
android·flutter·react native·ios·js·移动端·跨平台开发
我命由我123458 天前
微信小程序 - 页面返回并传递数据(使用事件通道、操作页面栈)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
小曹要微笑8 天前
HTTP与WebSocket协议深度解析
websocket·网络协议·http·js
酒尘&9 天前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
我命由我1234511 天前
微信小程序 - scroll-view 的一些要点(scroll-view 需要设置滚动方向、scroll-view 需要设置高度)
开发语言·前端·javascript·微信小程序·小程序·前端框架·js