2017-05-25 62 views
0

我的應用程序使用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(); 
     } 
    ); 

} 
+0

因此'spinner.hide()'不會被調用?爲什麼你的微調不斷出錯? – sabithpocker

+0

使用超時對於容易發生故障的網絡通信來說相當常見。 $ http對象在其config.timeout屬性中支持超時。這不是黑客! – James

+0

基本上,你的代碼是正確的,一切都應該正常工作。只要確保'spinner.hide'確實被調用(在'hide'方法內執行'console.log('qqq')')。如果這樣的話,這可能是'changeDetection'機制的標準問題......我想說它在Angular4中被破解了,但是開發人員現在不承認它。嘗試將Spinner類的構造函數(private ref ChangeDetectorRef){}'和'this.ref.detectChanges()'添加到'hide'方法。 –

回答

0

根據回覆,我能夠學習各種方法來處理這種情況。我最喜歡的一個是使用超時運算符。感謝大家。

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(); 
     } 
    ); 

}