[axios]Axios 不会解析/拒绝网络级别错误(即 onerror)

2024-05-15 957 views
1

我注意到,在当前的 chrome 上(不确定其他浏览器如何处理这个问题),如果我忘记启动 api 服务器,axios 不会解析或拒绝。我相信这是因为在网络级别, onload 永远不会在请求时被调用,但 onerror 会被调用,并且查看https://github.com/mzabriskie/axios/blob/master/lib/adapters/xhr.js我们不知道根本不处理 onerror。

本地主机 3000 2016-01-22 15-16-05

有什么理由不添加onerror处理程序?如果没有的话,很乐意尝试 PR。

回答

2

是的,这是错误的。很高兴接受 PR。

2

乍一看似乎request.onload = request.onerror = function () {...可行,因为我们已经在处理了,if (!request)会看一下。

8

我不知道这是否有效,因为request即使有错误,它仍然存在。应该和节点适配器正在做的事情一样简单。

request.onerror = function(error) {
  reject(error);
};
7

@mzabriskie 哦,所以你宁愿拒绝错误,而不是状态为 0 的响应对象?

1

我想是这样。主要是为了与鼻子适配器进行奇偶校验,但也没有任何响应数据可返回。而错误可以提供有关发生的情况的有意义的信息。

7

所以看起来 onerror 实际上并没有返回错误,而是一个进度事件。至少在http://localhost:5000api 没有实际运行的情况下是这样。

本地主机 3000 2016-01-22 16-13-12

我认为抛出该事件没有意义,因为它甚至不是错误对象。根据:http://stackoverflow.com/questions/4844643/is-it-possible-to-trap-cors-errors至少在cors错误的情况下,实际的错误对于你的JS代码来说是不可用的(只是得到记录到控制台)。

所以我想我们又回到了:要么以 0 状态拒绝,要么只是抛出诸如new Error('Unknown XHR error')想法之类的东西?

5

读了一下之后,看起来onerror只有在出现网络错误时才会被调用。我们就扔new Error('Network error');

4

:+1:同意,完成:#205

1

感谢您的帮助!

2

我也遇到这个问题,你的计划什么时候发布这个修复?

5

将尝试在本周末发布。

9

此修复程序在 0.9.1 中可用

7

我收到“网络错误”,但服务器响应“500 内部服务器错误”。

如果此错误响应能够更明确以实现更好的应用程序处理,那就太好了。这可能吗?