Javascript 服务器不响应时处理错误

Javascript 服务器不响应时处理错误,javascript,angular,Javascript,Angular,我的应用程序是使用Angular 2构建的。我使用的典型模式如下所示。如果出现服务器错误,我会根据需要执行许多操作。在下面的示例中,我使用了一条注释来指示重定向到错误页面 但是,偶尔会出现一些错误,服务器不响应,导致前端保持挂起状态,微调器旋转。我想知道这种情况是如何处理的。这有一个普遍的做法吗?有没有办法在某个时刻以优雅的方式重定向?我觉得我可以在某个时间添加一个超时来触发,但这看起来真的像是一个黑客 private getSites() { this.spinner.show();

我的应用程序是使用Angular 2构建的。我使用的典型模式如下所示。如果出现服务器错误,我会根据需要执行许多操作。在下面的示例中,我使用了一条注释来指示重定向到错误页面

但是,偶尔会出现一些错误,服务器不响应,导致前端保持挂起状态,微调器旋转。我想知道这种情况是如何处理的。这有一个普遍的做法吗?有没有办法在某个时刻以优雅的方式重定向?我觉得我可以在某个时间添加一个超时来触发,但这看起来真的像是一个黑客

private getSites() {
  this.spinner.show();
  this.sitesService.getSites(1)
    .subscribe(
      _data => {
        this.sites = _data;
        this.spinner.hide();
        this.loading = false;
      },
      _error => {
        // Redirect to < something went wrong >
        this.spinner.hide();
      }
    );

}
private getSites(){
this.spinner.show();
this.sitesService.getSites(1)
.订阅(
_数据=>{
this.sites=\u数据;
this.spinner.hide();
这一点:加载=错误;
},
_错误=>{
//重定向到<出现问题>
this.spinner.hide();
}
);
}

根据这些回答,我学会了处理这种情况的各种方法。我最喜欢的是使用超时操作符。谢谢大家

private getSites() {
  this.spinner.show();
  this.sitesService.getSites(1)
    .timeout(6000)
    .subscribe(
      _data => {
        this.sites = _data;
        this.spinner.hide();
        this.loading = false;
      },
      _error => {
        // Redirect to < something went wrong >
        this.spinner.hide();
      }
    );

}
private getSites(){
this.spinner.show();
this.sitesService.getSites(1)
.超时(6000)
.订阅(
_数据=>{
this.sites=\u数据;
this.spinner.hide();
这一点:加载=错误;
},
_错误=>{
//重定向到<出现问题>
this.spinner.hide();
}
);
}

So
spinner.hide()
不会被调用吗?为什么您的微调器总是在出错时旋转?使用超时在容易发生故障的网络通信中非常常见。angular$http对象在其config.timeout属性中支持超时。这不是黑客!基本上,您的代码是正确的,一切都应该正常工作。只要确保
spinner.hide
确实被调用(从
hide
方法内部执行
console.log('qqq')
)。如果这样做有效,那么这可能是
变更检测
机制的标准问题。。。我想说它在Angular4中被破坏了,但开发人员目前还不承认。尝试将Spinner类
构造函数(private ref ChangeDetectorRef){}
此.ref.detectChanges()
添加到
隐藏
方法中。我感谢您的响应。谢谢你,萨比斯波克。代码运行良好。我只是以它为例。spinner保持运行的唯一时间是当发生了一些事情并且没有服务器响应时,因此应用程序基本上挂起。