axios发送请求无返回,一直处于Pending状态

症状:Android正常,iOS微信中正常,iOS客户端出错。

卡了一天,最开始以为是App的锅。

iOS在做了一些修改之后,在iOS 13.6中修复了该问题;但在最新的14版本中问题依然存在

后来又想着是不是请求已经发出去了但是服务端没有返回结果,于是又去服务端查日志。(也不是服务端的问题)

内外都找不到问题,感觉我的天空都暗了。

这时候又想着是不是axios 0.21.0的问题,手动降级npm install axios@0.19.0。(也还不行,我淦啊)

最后一搏,在axios的拦截器里输出一下:

1
2
3
4
5
axios.interceptors.response.use(() => {
...
}, (error) => {
console.log('response error', error)
})

嗯?有报错了。

setRequestHeader forEach dispatchXhrRequest Promise…

我的headers部分的确是一次性赋值的,难道需要一条条插入?

1
2
3
4
5
6
7
// old
reqConfig.headers = Object.assign({}, headers)

// new
for ( let key in headers ) {
reqConfig.headers[key] = headers[key]
}

改了之后重试,还是不行。。。。

这时候我对key产生了些好奇,决定循环输出key看下:

嗯?怎么有两个user-agent?难道是这个问题?

于是我更新了下我的代码:

1
2
3
4
5
for (const key in store.state.headers) {
if (key !== 'Accept' && key !== 'user-agent') {
reqConfig.headers[key] = (store.state.headers as any)[key]
}
}

淦,好了。

总结:当headers出现重复值(即使大小写不同)时,axios请求就会出现一直Pending的状态。


评论区