Taro开发设置interceptors后拿不到abort以及当节点很深无法拿到dom解决方案

103 阅读1分钟

设置interceptors后拿不到abort解决方案

/*
 * @Author: atdow
 * @Date: 2023-10-08 14:24:13
 * @LastEditors: null
 * @LastEditTime: 2023-10-08 14:24:21
 * @Description: file description
 */
import Taro from '@tarojs/taro'
import { pageToLogin } from './utils'
import { HTTP_STATUS } from './config'

const customInterceptor = chain => {
  const requestParams = chain.requestParams
  let obj = chain
    .proceed(requestParams)
  const abort = obj.abort
  obj = obj.then(res => {
    // Taro.hideLoading()
    // 只要请求成功,不管返回什么状态码,都走这个回调
    if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
      Taro.showToast({
        title: '请求资源不存在',
        icon: 'none',
        duration: 2000
      })
      return Promise.reject({ desc: '请求资源不存在' })
    } else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
      Taro.showToast({
        title: '服务端出现了问题',
        icon: 'none',
        duration: 2000
      })
      return Promise.reject({ desc: '服务端出现了问题' })
    } else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
      Taro.setStorageSync('Authorization', '')
      pageToLogin()
      Taro.showToast({
        title: '没有权限访问',
        icon: 'none',
        duration: 2000
      })
      return Promise.reject({ desc: '没有权限访问' })
    } else if (res.statusCode === HTTP_STATUS.AUTHENTICATE) {
      Taro.setStorageSync('Authorization', '')
      pageToLogin()
      Taro.showToast({
        title: '需要鉴权',
        icon: 'none',
        duration: 2000
      })
      return Promise.reject({ desc: '需要鉴权' })
    } else if (res.statusCode === HTTP_STATUS.SERVER_ERROR) {
      Taro.showToast({
        title: '服务器错误',
        icon: 'none',
        duration: 2000
      })
      return Promise.reject({ desc: '服务器错误' })
    } else if (res.statusCode === HTTP_STATUS.SUCCESS) {
      if ([ '-1','-2' ].includes(res?.data?.code)) {
        Taro.showToast({
          title: res.data.message || '操作失败,请联系管理员',
          icon: 'none',
          duration: 2000
        })
      }
      return res.data
    }
  })
    .catch(error => {
      console.error(error)
      return Promise.reject(error)
    })
  obj.abort = abort
  return obj
}

// Taro 提供了两个内置拦截器
// logInterceptor - 用于打印请求的相关信息
// timeoutInterceptor - 在请求超时时抛出错误。
// const interceptors = [customInterceptor, Taro.interceptors.logInterceptor]
const interceptors = [ customInterceptor ]

export default interceptors

image.png

image.png

节点很深无法拿到dom解决方案

image.png