2017-02-09 61 views
4

我有以下代碼(簡化了此帖) - 假定初始調用onStart()如何在輪詢時使用RXJS HTTP處理Angular2中的連接丟失

運行這個工作正常。如果我失去了互聯網連接,我得到net::ERR_INTERNET_DISCONNECTED錯誤(按預期)輪詢停止。

顯然,我沒有處理任何錯誤,因爲這是我卡住的地方。我不清楚我在哪裏處理這些錯誤以及如何處理?我需要再次撥打startPolling()嗎?

即使沒有互聯網連接,我也需要輪詢才能繼續,以便重新連接數據得到更新。有什麼建議嗎?

onStart() { 
    this.startPolling().subscribe(data => { 
     // do something with the data 
    }); 
} 

startPolling(): Observable<any> { 
    return Observable 
     .interval(10000) 
     .flatMap(() => this.getData()); 
} 

getData() { 
    var url = `http://someurl.com/api`; 
    return this.http.get(url) 
     .map(response => { 
      return response.json(); 
     }); 
} 

在此先感謝。

回答

5

如果你知道錯誤發生,因爲this.http.get(url)那麼你可以添加catch()操作,讓您訂閱另一個可觀測的,而不是源可觀察發送的error通知。

getData() { 
    var url = `http://someurl.com/api`; 
    return this.http.get(url) 
     .catch(err => Observable.empty()) 
     .map(response => { 
      return response.json(); 
     }); 
} 

這將簡單地忽略錯誤並且不會發射任何東西。

+0

謝謝馬丁我會給它一個去。 –

+0

工作過,感謝你。認爲我需要在觀察者身上發現一點點...... –