umijs / umi-request

A request tool based on fetch.
2.2k stars 333 forks source link

自定义请求异常抛出的写法 #217

Open fattypanda opened 3 years ago

fattypanda commented 3 years ago

这里分享一下,我的做法(抛砖引玉):

import { ResponseError as UMIResponseError } from 'umi-request';

export class ResponseError<D = any> extends Error implements UMIResponseError {
  public data: D;
  public response: Response;
  public request: {
    url: string;
    options: RequestOptionsInit;
  };
  public type: string;

  constructor(response: Response, text: string, data: D, request: RequestOptionsInit, type = 'ResponseError') {
    super(text || response.statusText);
    this.name = 'ResponseError';
    this.data = data;
    this.response = response;
    this.request = { url: response.url, options: request };
    this.type = type;
  }
}

// 中间省略

request.interceptors.response.use((response, options) => {
  if (response.status !== 200) {
    throw new ResponseError(response, response.statusText, void 0, options);
  }
  return response;
});
blueju commented 3 years ago

这里也分享一下我的做法 https://github.com/blueju/umi-request-practice

gx28ga commented 3 years ago
request.interceptors.response.use(async (response) => {
  if (response.status === 200) { // 请求成功
    const contentType = response.headers.get('Content-Type');
    if (contentType.includes('application/json')) {
      const {
        code, data, msg,
      } = await response.json();

      if (code && code === codeType.SUCCESS) {
        return data;
      }
      throw new Error(code, msg);
    }
    return response.blob();
  }
  throw new Error(response.status, response.statusText);
});

export default request;

报错 Unhandled Rejection 怎么会这样

mamababa commented 2 months ago
request.interceptors.response.use(async (response) => {
  if (response.status === 200) { // 请求成功
    const contentType = response.headers.get('Content-Type');
    if (contentType.includes('application/json')) {
      const {
        code, data, msg,
      } = await response.json();

      if (code && code === codeType.SUCCESS) {
        return data;
      }
      throw new Error(code, msg);
    }
    return response.blob();
  }
  throw new Error(response.status, response.statusText);
});

export default request;

报错 Unhandled Rejection 怎么会这样

后来解决了吗