Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 客户端JS/Angular中是否存在HTTP连接超时?_Javascript_Angular_Http_Timeout - Fatal编程技术网

Javascript 客户端JS/Angular中是否存在HTTP连接超时?

Javascript 客户端JS/Angular中是否存在HTTP连接超时?,javascript,angular,http,timeout,Javascript,Angular,Http,Timeout,我使用Angular来发出HTTP请求,我想为它们指定一个超时 我知道我可以使用HttpInterceptor并为RxJS操作符添加一个超时,但是,这些超时适用于整个请求,如果数据传输正在进行,我不想中止整个请求,只有当浏览器在尝试连接时挂起时 例如,Node.js中提供了我需要的超时类型,这已得到很好的解释: 假设您调用了socket.setTimeout(300)将超时设置为300 毫秒,DNS查找需要100毫秒,建立连接需要100毫秒 对于远程服务器,远程服务器发送响应的时间为200毫秒

我使用Angular来发出HTTP请求,我想为它们指定一个超时

我知道我可以使用HttpInterceptor并为RxJS操作符添加一个超时,但是,这些超时适用于整个请求,如果数据传输正在进行,我不想中止整个请求,只有当浏览器在尝试连接时挂起时

例如,Node.js中提供了我需要的超时类型,这已得到很好的解释:

假设您调用了
socket.setTimeout(300)
将超时设置为300 毫秒,DNS查找需要100毫秒,建立连接需要100毫秒 对于远程服务器,远程服务器发送响应的时间为200毫秒 标头,50毫秒,用于传输响应正文的前半部分 剩下的50毫秒。而整个请求和响应 耗时超过500毫秒,根本不会发出超时事件


在Angular应用程序中有可能出现这样的超时吗?

我查看了HttpClient的源代码。实际处理底层XMLHttpRequest的代码是类HttpXhrBackend,位于名为

不幸的是,HttpXhrBackend只使用XMLHttpRequest的默认设置,没有提供设置XMLHttpRequest超时值的方法

我看到了使用RxJS操作符缩短有效超时的建议, 但这有点像黑客,并不能真正满足你的要求

因此,从技术上讲,您的问题的答案是“否”,而不是HttpClient,但我认为您可以创建自己的HttpBackend实现并尝试注入它


p.S.展示了如何提供定制的HttpBackend实现。

为什么使用RxJS操作符会被视为黑客使用RxJS操作符本身并不是黑客行为,但试图通过提前终止连接来缩短XMLHttpRequest的超时是黑客行为。YMMVFair,您是否也将中止请求归类为类似于
AbortController
hack的行为?@greybearedgeek感谢您的调查。我接受这一回答,因为我认为目前也没有合理的解决办法。不知何故,扩展HttpClient或使用其他定制实现会有更多的缺点,我想,所以我只是做了一个简单的尝试。