小编典典

在不重试的情况下在Angular中执行Http get方法,然后等到服务器发送响应?

spring-boot

我在Spring-Boot应用程序的控制器中具有以下内容:

@RequestMapping(method=RequestMethod.GET,value="/info")
public DataModel getinfodata()
{
    //this method runs some script which takes more than 3 minutes and sends the response back
    return run_xyz()
}

在我的角度应用程序中,我有以下内容:

export class FetchService {
  private _url:string="/info";
    constructor(private _http:Http) { }
    getData():any
    {
      return this._http.get(this._url).map((res:Response)=>res.json()).
        catch(this.errorHandler).subscribe(data=>console.log(data));
    }
    errorHandler(error: Response){
      console.error(error);
      return Observable.throw(error || "Server Error");
    }

我目前面临的问题是Http
get正在对服务器进行静默重试,结果,我昂贵的脚本被调用了3或4次。有没有一种方法,get它将仅使用0次重试发出单个请求并等待脚本完成,然后应将响应发送回去。我仅调用一次getData方法。
来自后端的响应 快照在端口8080上运行的Tomcat

快照正常情况下(脚本未运行 Angular CLI

最终响应189秒后)的服务器响应快照


阅读 349

收藏
2020-05-30

共1个答案

小编典典

最终,我弄清楚了为什么会发生这种情况。dev-server使用http-proxy-middleware package More
Here,
并且此软件包中提供的代理选项来自基础的http-proxy library http-
proxy选项
。其中之一是

proxyTimeout

代理未收到响应的超时时间(以毫秒为单位)

如果服务器未能在规定的时间内(120秒)内响应,则默认值为〜120秒(基于我的观察)。"timeout":30000在代理配置文件中覆盖默认超时可以解决此问题。

{
  "/info": {
     "target":  {
       "host": "localhost",
       "protocol": "http:",
       "port": 8080
     },
     "secure": false,
     "changeOrigin": true,
     "logLevel": "debug",
     "timeout":30000

  }
}
2020-05-30