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

Mik*_* K. 3 angular2-http angular angular4-httpclient

我的有角4.3.2代码正在调用我的后端服务,该服务需要2-4分钟才能返回。仅使用默认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));
Run Code Online (Sandbox Code Playgroud)

我也尝试了一下,.timeoutWith(126000, Observable.throw(new Error("Timed out")))但无济于事。

Rea*_*lar 7

您不能更改HTTP请求的Web浏览器的网络超时设置。该timeout()运营商抛出达到计时器时,JavaScript错误,但是这无关与通信网络超时。

例如; 我可以timeout()任何可观察到的地方使用运算符。

of("hello").pipe(delay(5000), timeout(1000));
Run Code Online (Sandbox Code Playgroud)

上面的内容将在1秒后超时。

我的Angular 4.3.2代码正在调用我的后端服务,该服务需要2-4分钟才能返回

服务器必须的2-4分钟的持续时间期间发送一个HTTP报头和部分身体。这是继续HTTP连接所必需的,客户端无法执行任何操作来保持连接活动。

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

您可以要求服务器启动任务,然后按一定时间间隔轮询以查看任务是否完成,或者可以使用websocket与服务器通信并保持连接状态,直到完成任务为止。

两种方法都是广泛的主题,我无法提供更多细节。