wx-request-plus
Version:
增强型微信小程序请求库,支持错误处理、Promise、缓存、弱网处理、请求队列等功能
128 lines (127 loc) • 3.93 kB
TypeScript
export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS' | 'TRACE' | 'CONNECT';
export type CacheMode = boolean | 'force-cache' | 'only-if-cached' | 'no-cache';
export interface RequestConfig {
url?: string;
baseURL?: string;
method?: Method;
data?: any;
params?: Record<string, any>;
headers?: Record<string, string>;
timeout?: number;
cache?: CacheMode;
cacheKey?: string;
cacheExpire?: number;
retry?: boolean | number;
retryDelay?: number;
retryIncrementalDelay?: boolean;
priority?: number;
cancelOnNavigate?: boolean;
ignoreQueue?: boolean;
extractField?: string | ((data: any) => any);
skipExtract?: boolean;
returnData?: boolean;
transformRequest?: (data: any, headers: Record<string, string>) => any;
transformResponse?: (data: any, response: Response) => any;
validateStatus?: (status: number) => boolean;
onDownloadProgress?: (progressEvent: any) => void;
onUploadProgress?: (progressEvent: any) => void;
enableHttp2?: boolean;
enableQuic?: boolean;
enableCache?: boolean;
enableVerify?: boolean;
onDone?: (res: Response) => void;
mock?: boolean | ((config: RequestConfig) => Response);
cancelToken?: {
promise: Promise<string>;
};
[key: string]: any;
}
export interface WxRequestConfig extends RequestConfig {
maxCacheSize?: number;
maxCacheAge?: number;
retryTimes?: number;
retryDelay?: number;
enableQueue?: boolean;
maxConcurrent?: number;
enableOfflineQueue?: boolean;
extractField?: string | ((data: any) => any);
returnData?: boolean;
requestAdapter?: RequestAdapter;
cacheAdapter?: CacheAdapter;
}
export interface Response<T = any> {
data: T;
status: number;
statusText: string;
headers: Record<string, string>;
config: RequestConfig;
request?: any;
fromCache?: boolean;
timestamp?: number;
}
export interface RequestError extends Error {
config: RequestConfig;
status?: number;
statusText?: string;
headers?: Record<string, string>;
data?: any;
request?: any;
type?: ErrorType;
retryCount?: number;
originalError?: any;
}
export declare enum ErrorType {
TIMEOUT = "TIMEOUT",
NETWORK = "NETWORK",
CANCEL = "CANCEL",
SERVER = "SERVER",
CLIENT = "CLIENT",
OFFLINE = "OFFLINE",
UNKNOWN = "UNKNOWN"
}
export interface InterceptorHandlers<T> {
fulfilled: (value: T) => T | Promise<T>;
rejected?: (error: RequestError) => any;
}
export interface Interceptor<T> {
use(handlers: InterceptorHandlers<T>): number;
eject(id: number): void;
}
export interface InterceptorManager<T> {
handlers: Array<InterceptorHandlers<T> | null>;
use(fulfilled: (value: T) => T | Promise<T>, rejected?: (error: RequestError) => any): number;
eject(id: number): void;
forEach(fn: (handler: InterceptorHandlers<T>) => void): void;
}
export interface RequestAdapter {
(config: RequestConfig): Promise<Response>;
}
export interface CacheAdapter {
get(key: string): Promise<Response | undefined>;
set(key: string, value: Response, ttl?: number): Promise<void>;
delete(key: string): Promise<void>;
clear(): Promise<void>;
}
export interface QueueItem {
config: RequestConfig;
execute: () => Promise<void>;
timestamp: number;
priority: number;
status: 'pending' | 'processing' | 'completed' | 'failed';
}
export interface NetworkStatus {
isConnected: boolean;
networkType: 'wifi' | '2g' | '3g' | '4g' | '5g' | 'unknown' | 'none';
signalStrength?: number;
}
export interface MonitorData {
totalRequests: number;
successRequests: number;
failedRequests: number;
cachedRequests: number;
averageResponseTime: number;
requestsPerMinute: number;
errorRate: number;
currentQueueSize: number;
currentNetworkStatus: NetworkStatus;
}