因為要在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啟動的時候就執行: