【问题标题】:Can Axios differentiate between "no network" and "network disconnected"Axios 能否区分“无网络”和“网络断开”?
【发布时间】:2018-06-18 10:48:58
【问题描述】:

Axios 是否可以区分以下内容:

  • 由于客户端没有网络连接而失败的请求 发出请求的时间点 - (ERR_CONNECTION_REFUSED)。
  • 由于网络连接丢失而失败的请求之后 已发出请求,但收到响应之前 - (ERR_INTERNET_DISCONNECTED)。

似乎在这两种情况下,我们得到的只是一个相当无用的“网络错误”消息......

Axios 文档 (https://github.com/axios/axios#handling-errors) 建议在后一种情况下,应该填充 error.request,但我无法复制存在error.request任何场景。在上述两种情况下,我都会得到一个如下所示的错误对象:

{
  config: { ... },
  response: undefined,
  message: "Network Error",
  stack: "Error: Network Error at createError (http://localhost:3000/static/js/bundle.js:1636:15) at XMLHttpRequest.handleError (http://localhost:3000/static/js/bundle.js:1170:14)"
}

【问题讨论】:

标签: javascript error-handling axios


【解决方案1】:

我不知道你是否能得到ERR_CONNECTION_REFUSED,但是ERR_INTERNET_DISCONNECTED你可以得到使用本机网络信息API,看看下面的sn-p:

var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
console.log(connection);

connection.type: "none" 表示你是ERR_INTERNET_DISCONNECTED 时,也许你可以探索一下这个解决方案。

你可以阅读完整的文档here, cya

【讨论】:

  • 这无助于确定网络连接是在发出请求之前还是在进行中时断开的......但是应该可以编写一个请求拦截器来检查当前连接状态,如果断开连接,我们可以引发错误以表示 ERR_CONNECTION_REFUSED 状态,因此在发送请求后发生的任何其他网络错误都可以解释为 ERR_INTERNET_DISCONNECTED。大概。将做一些进一步的工作,看看这是否按预期工作。
  • 所以,navigator.connection 每次连接有一些修改时都会改变。
  • 所以我们可以通过navigator.connection.onchange 监听网络连接的变化——尽管只在兼容的浏览器(Chrome 和 Opera)中——或者更好的是,使用全局 onlineoffline 事件 @987654322 @...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多