【问题标题】:What is $http timeout mean?$http 超时是什么意思?
【发布时间】:2016-03-12 20:23:15
【问题描述】:

当使用$http 时,我们可以为它设置超时时间,它看起来像这样:

$http.get(url,{timeout: 5000}).success(function(data){});

超时是什么意思?是否意味着必须在超时期限内完成连接(数据下载)?还是意味着接收服务器响应的延迟时间?移动连接的最佳通用最小超时设置是什么?

【问题讨论】:

    标签: javascript angularjs http connection timeout


    【解决方案1】:

    如果http请求没有在指定的timeout时间内完成,则会触发错误。

    所以,这有点像对$http.get() 函数说以下内容:

    1. 我希望您获取此 URL 并获取数据
    2. 如果您成功了,请致电我的 .success() 处理程序并将数据提供给我。
    3. 如果请求的完成时间超过 5000 毫秒,则触发超时错误,而不是继续等待。

    仅供参考,在我看来 AngularJS 已经转换为使用标准的 Promise 语法,所以你可能应该这样做:

    $http.get(url,{timeout: 5000}).then(function(data){
        // successfully received the data here
    }, function(err) {
        // some sort of error here (could be a timeout error)
    });
    

    超时是什么意思?是否意味着必须在超时期限内完成连接(数据下载)?

    是的。如果在该时间段内未完成,它将返回错误。这样可以避免长时间等待请求。

    或者是指接收服务器响应的延迟时间?

    不,这不是延迟时间。

    移动连接的最佳通用最小超时设置是什么?

    如果没有更多细节,这很难说。许多不同的事情可能会驱动您将其设置为什么。有时,将超时设置为一个相当长的值(比如 120 秒)并没有什么坏处,以防服务器或某些移动链接在某一天碰巧特别慢,并且您希望尽可能多地给它机会在这些方面取得成功情况。在其他情况下(取决于特定的用户交互),如果响应时间超过 5 秒,用户无论如何都会放弃,因此等待比用户已经放弃的结果更长的时间可能没有任何价值。

    【讨论】:

    • 感谢您的回答。您的意思是数据必须在 5 秒内完成(基于我的示例),否则会认为失败?这是否意味着如果服务器确实在 5 秒内响应,但要检索的数据很大,需要 30 秒才能下载。那么这是否意味着连接将始终视为失败?
    • @user1995781 - AngularJS 文档中没有描述当响应本身需要很长时间才能下载时,超时究竟是如何工作的,因此唯一确定的方法是研究 AngularJS 代码并查看它如何处理超时。超时将描述没有网络活动的时间,而不是整个响应下载的时间,这是有道理的。但是,老实说,我不知道,如果您想知道,则必须在 AngularJS 代码中找到超时的实现或对其进行测试。
    • @user1995781 - 我可以通过查看相关的AngularJS source 来判断,超时是请求完全完成的时间,因此它包括任何时间下载响应是什么。
    • 非常感谢您检查源代码。我刚刚对它进行了实验。确实它需要数据才能下载完成。在这种情况下,无论如何我可以为延迟获得服务器响应(不是数据下载完成)做“超时”吗?你知道在手机上,有时连接不稳定,与其浪费用户时间等待死连接,还不如自动检测超时重试。
    【解决方案2】:

    timeout - {number|Promise} - 以毫秒为单位的超时时间,或承诺在解决时应中止请求。 Source

    无论如何,在 JS 中,超时的意思是“在 X 时间之后执行一个动作”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2016-03-18
      • 2021-01-19
      • 2019-03-01
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多