马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下是一个支持 Promise 的微信小步伐哀求封装方案,包含基础哀求、拦截器、错误处置处罚和类型提示:
- // utils/request.js
- // 基础配置
- const config = {
- baseURL: 'https://api.example.com',
- timeout: 10000,
- headers: {
- 'Content-Type': 'application/json'
- }
- }
- // 拦截器
- const interceptors = {
- request: [],
- response: []
- }
- // 添加拦截器
- function addInterceptor(type, interceptor) {
- interceptors[type].push(interceptor)
- }
- // 请求核心方法
- function request(options = {}) {
- return new Promise((resolve, reject) => {
- // 合并配置
- const mergedOptions = {
- url: config.baseURL + (options.url || ''),
- method: 'GET',
- header: { ...config.headers, ...options.header },
- data: options.data || {},
- timeout: options.timeout || config.timeout,
- ...options
- }
- // 请求拦截
- const applyRequestInterceptors = async () => {
- for (const interceptor of interceptors.request) {
- mergedOptions = await interceptor(mergedOptions)
- }
- return mergedOptions
- }
- // 响应处理
- const handleResponse = async (res) => {
- let response = res
- for (const interceptor of interceptors.response) {
- response = await interceptor(response)
- }
- if (response.statusCode >= 200 && response.statusCode < 300) {
- resolve(response.data)
- } else {
- reject(response)
- }
- }
- // 执行请求
- applyRequestInterceptors()
- .then(finalOptions => {
- wx.request({
- ...finalOptions,
- success: handleResponse,
- fail: error => {
- wx.showToast({
- title: '网络连接失败',
- icon: 'none'
- })
- reject(error)
- }
- })
- })
- .catch(reject)
- })
- }
- // 快捷方法
- const http = {
- get: (url, params, options) => request({ url, method: 'GET', data: params, ...options }),
- post: (url, data, options) => request({ url, method: 'POST', data, ...options }),
- put: (url, data, options) => request({ url, method: 'PUT', data, ...options }),
- delete: (url, data, options) => request({ url, method: 'DELETE', data, ...options }),
- interceptors: {
- request: {
- use: interceptor => addInterceptor('request', interceptor)
- },
- response: {
- use: interceptor => addInterceptor('response', interceptor)
- }
- }
- }
- export default http
复制代码 利用示例:
- // 在页面或组件中
- import http from '@/utils/request'
- // 添加请求拦截器(例如添加 token)
- http.interceptors.request.use(config => {
- const token = wx.getStorageSync('token')
- if (token) {
- config.header.Authorization = `Bearer ${token}`
- }
- return config
- })
- // 添加响应拦截器(例如处理通用错误)
- http.interceptors.response.use(response => {
- if (response.code !== 200) {
- wx.showToast({ title: response.message, icon: 'none' })
- return Promise.reject(response)
- }
- return response
- })
- // 发起请求
- http.get('/user/info', { id: 123 })
- .then(data => console.log('请求成功:', data))
- .catch(err => console.error('请求失败:', err))
- http.post('/order/create', { productId: 456 })
- .then(console.log)
- .catch(console.error)
复制代码 重要功能特点:
- Promise 支持:利用 Promise 封装原生哀求 API
- 拦截器机制:
- 哀求拦截器(认证、参数处置处罚)
- 相应拦截器(错误处置处罚、数据格式化)
- 快捷方法:内置 GET/POST/PUT/DELETE 快捷方法
- 全局设置:
- 错误处置处罚:
- 网络错误自动提示
- 状态码错误处置处罚
- 业务状态码统一处置处罚
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |