this.http.get 的超时不能超过 2 分钟?

Can't have a timeout of over 2 minutes with this.http.get?

我的 angular 4.3.2 代码正在调用我的后端服务,需要 2-4 分钟才能到达 return。仅使用默认 this.http.get 代码,我看到默认超时在 2 分钟后开始。但是,当我尝试设置任何超过 2 分钟的超时时,它会失败,因为它永远不会让超时超过 2 分钟。

我尝试过使用 100、100000 (1.7m) 和 114000(1.9m),它们的工作原理是它会在这些值处超时。但是当我尝试 126000 (2.1m)、180000 (3m) 和 1800000 (30m) 时,我再次看到它在 2 分钟后超时。

this.http.get('myUrl')
.timeout(126000)
.map((res: Response) => this.convertResponse(res));

我也用 .timeoutWith(126000, Observable.throw(new Error("Timed out"))) 试过了,没用。

您无法更改 Web 浏览器的 HTTP 请求网络超时设置。 timeout() 运算符在到达计时器时抛出 JavaScript 错误,但这与通信的网络超时无关。

例如;我可以在 any observable.

上使用 timeout() 运算符
of("hello").pipe(delay(5000), timeout(1000));

以上1秒后超时

My angular 4.3.2 code is calling my back-end service that takes 2-4 minutes to return

服务器 必须在 2-4 分钟的时间内传输 HTTP header 和部分 body。这是继续 HTTP 连接所必需的,客户端无法执行任何操作来保持连接。

HTTP 请求不能快速完成是一种不好的做法。

您可以要求服务器启动一个任务,然后每隔一段时间轮询一次以查看任务是否完成,或者您可以使用 websockets 与服务器通信并保持连接直到完成。

这两种方法都是广泛的主题,我不能再详细介绍了。

我不认为这是浏览器网络超时的问题,因为我可以使用 jQuery.ajax() 发出更长的请求,甚至无需传输 HTTP header 或部分 body 来自后端,并且请求保持活动状态。

我在评论中没有收到你的回复,但我在我的开发机器上遇到了这个确切的问题。我使用的是 proxy config,代理的默认超时是 120 秒(2 分钟)。如果是这种情况,您只需要在配置中定义一个更高的值。

{
  "/api": {
    "target": "http://localhost:3000",
    "secure": false,
    "timeout": 360000
  }
}

但我同意@Reactgular 的观点,在大多数情况下,您会希望 HTTP 请求 return 快速。