Angular 7 HTTP:2分钟后请求重试

时间:2019-05-14 12:01:56

标签: angular rxjs angular7

我面临的一个我不完全了解的问题。

我正在发出触发数据库上11k插入的http.post()请求。这花费了一段时间(超过3分钟),我能够通过批量插入来改进它,并在2分钟内将其减少,但这不是重点。关键是我注意到,如果请求花费的时间超过2分钟,则可以看到触发了相同的请求。

在“网络”选项卡上的调试器窗口中,这看不到。在那里,我只看到一个请求。

以下是我针对请求的角度代码示例

    this.http.post(this.portfoliosUrl + '/import-portfolios', portfolios);

我注意到这是客户端触发2请求的原因,因为我试图像这样增加超时时间:

    this.http.post<Portfolio[]>(this.portfoliosUrl + '/import-portfolios', portfolios)
        .pipe(
            timeout(300000),
            catchError(e => {
                // do something on a timeout
                console.log("error importing portfolio: " + e)
                return of(null);
            })
        );

显然,超时未达到我的预期。我没有等待5分钟,直到超时。但是因为我返回的是null,所以它将其作为正确的响应接受,并且不会触发第二个请求。

在服务器端,我们可以看到重复的请求:

2019-05-14 13:43:45 [http-nio-8181-exec-3]  DEBUG com.robecosam.samsara.security.PathLocationStrategyFilter:35 - PathLocationStrategyFilter: '/rest/portfolios/import-portfolios' Should NOT dispatch

2019-05-14 13:45:45 [http-nio-8181-exec-4]  DEBUG com.robecosam.samsara.security.PathLocationStrategyFilter:35 - PathLocationStrategyFilter: '/rest/portfolios/import-portfolios' Should NOT dispatch

如您所见,两个不同的线程,相同的URL和相差2分钟的时间。

这很危险,因为我们正在谈论具有副作用的POST请求。如果两次提出请求,我们可能会遇到麻烦,例如转移额外的钱。

有人可以解释一下为什么Angular在服务器无响应2分钟后重试请求吗?我该如何解决?是否可以增加http超时?可以避免重复通话吗?

非常感谢您的帮助。

致谢

0 个答案:

没有答案