# 1. 前言
在第 6 篇文章的最后遗留问题中,我们还看到如果我们不去设置 responseType
的情况下,当服务端返回给我们的数据是字符串类型:
data: "{"
a ":1,"
b ":2}"
1
2
3
2
3
而我们应该将其默认的转化成对象的形式:
{
a: 1,
b: 2}
1
2
3
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
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
2
3
4
5
6
7
8
9
10
11
OK,处理好之后我们再次运行第 6 篇文章中的 demo
,观察返回的响应 data
。
# 4. 查看结果
运行 demo
后,我们从控制台的打印信息中看到 data
已经成功转化成对象形式了。
OK,至此,我们重构的 axios
的基础功能就已经实现完毕了,后面,我们将会继续补充丰富。