504从服务器读取响应时超时

时间:2019-06-11 15:27:17

标签: angular http-status-code-504

我有一个Angular前端和一个.NET CORE后端。我有一个特别重的要求,需要一段时间才能执行。 在浏览器控制台中查看时,从服务器读取响应时出现504:超时。

后端完成了请求,我可以在日志中看到它在一定时间后(超时后的某个地方)返回了一些JSON。

首先,我尝试如下向角度请求添加超时标头:

    const options = { headers: new HttpHeaders({ timeout: `${10000}` }) };

这行不通。

我还尝试在rxjs管道中添加该函数。

 this.service.getData(this.id, this.codeSystem, this.code)
    .pipe(
      timeout(120000),
      map(data=> {
       this.data = data;
      }),
      takeWhile(() => this.componentActive),
      catchError(error => {
        console.log(error);
      }))
    .subscribe();

此后,我尝试在IIS中的高级设置下增加“连接超时”,但这也没有用。

目前,我不确定问题位于何处或如何解决。有人有想法/建议吗?

3 个答案:

答案 0 :(得分:0)

您不需要超时。您可以设置taketakeUntil,以便您的订阅处于“热”状态,直到得到响应为止。

callEndpoint() {
    this.service.getData.pipe(
       take(1) // wait for response
    ).subscribe( (user: User) => {
       console.log(user); // make sure you're getting a response from dataService
    });
}

此外,检查端点是否正在获取期望的数据: this.id, this.codeSystem, this.code

答案 1 :(得分:0)

问题位于服务器上。您无法通过浏览器执行任何操作。如果服务器未在限定时间内发送响应,则大多数浏览器将自行断开连接 ,出于安全原因,我们无法从JavaScript更改响应。服务器必须发送部分正文内容,以响应继续连接的请求。只要服务器忙,它就必须发送一些消息以保持连接。

如果您的API需要很长时间才能完成,并且看到 disconnections ,那么您应该放弃期望得到JSON响应的情况。

与API的作者联系,并很好地要求他们修复他们的服务器。

发出需要很长时间才能完成的请求时。最佳实践是POST启动服务,然后服务器使用任务ID 进行响应。然后,您将定期GET对该任务ID 进行状态更新,直到任务ID 的状态报告发生了什么。然后,您可以请求服务器将任务的输出发送给客户端。

在此期间,发出请求并忽略错误。您无法通过浏览器解决此问题。

答案 2 :(得分:0)

确保您的服务请求返回承诺。喜欢:

<table id="t1"> </table>