# 1. 前言

在第 6 篇文章的最后遗留问题中,我们还看到如果我们不去设置 responseType 的情况下,当服务端返回给我们的数据是字符串类型:

data: "{"
a ":1,"
b ":2}"
1
2
3

而我们应该将其默认的转化成对象的形式:

a: 1,
    b: 2
1
2
3

所以,接下来我们就要将字符串处理成对象形式。

# 2. 实现 transformResponse 函数

根据需求分析,我们要实现一个 transformResponse 工具函数。我们在 src/helpers/data.ts 中实现该函数:

export function transformResponse(data: any): any {
  if (typeof data === "string") {
    try {
      data = JSON.parse(data);
    } catch (e) {
      // do nothing
    }
  }
  return data;
}
1
2
3
4
5
6
7
8
9
10

# 3. 利用 transformResponse 函数处理响应 data

函数实现好之后,我们就可以用它来处理返回的响应 data 了,在 src/index.ts 中:

function axios(config: AxiosRequestConfig): AxiosPromise {
  processConfig(config);
  return xhr(config).then((res) => {
    return transformResponseData(res);
  });
}

function transformResponseData(res: AxiosResponse): AxiosResponse {
  res.data = transformResponse(res.data);
  return res;
}
1
2
3
4
5
6
7
8
9
10
11

OK,处理好之后我们再次运行第 6 篇文章中的 demo ,观察返回的响应 data

# 4. 查看结果

运行 demo 后,我们从控制台的打印信息中看到 data 已经成功转化成对象形式了。

OK,至此,我们重构的 axios 的基础功能就已经实现完毕了,后面,我们将会继续补充丰富。