2017-03-06 38 views
0

構建心​​跳服務,我想建立一個heatbeat服務,爲我angular2網站。遠程設備是網站的主機,客戶端應能夠檢測設備是否無法訪問/脫機。 服務應定期輪詢(網絡服務器)遠程設備。與RxJS

我知道一個失敗的HTTP調用不能直接與整個設備的在線/離線狀態等同,但對於我的要求應該是足夠的。

目前我使用以下可觀察其放置的角度服務的內部:

public getStatus() { 
    return this.http.get(this.config.apiEndpoint + this.fileName) 
     .map(() => { return '1'; }) 
     .timeout(500) 
     .catch(() => {return '0';}) 
     .retry() 
     .delay(1500) 
     .repeat(); 
    } 

可觀察的目標僅僅是在Web服務器上幾乎是空文件。 組件訂閱observable/service,然後在設備狀態更改時顯示通知。

原則上可觀察到的作品,但它提供者(網上)和零點(離線)到訂閱了它的組件的連續流。現在,我必須向組件(以及使用此服務的每個其他組件)添加一些邏輯來處理例如兩個連續的零,即通知僅顯示一次。

這將是更清潔和中分類當設備的狀態改變的服務可以做到這一點額外的工作,只提供一個結果(到組件)。我也嘗試使用Observable.timerflatMap但未能使其工作,但我希望rxjs提供瞭解決此問題的方法。

回答

1

你可以使用distinctUntilChanged運營商,這將確保只傳遞不同的值。

希望這有助於!

+0

我加入提到運營商和它的作品如預期。 – Akkusativobjekt

+0

編輯:所以它部分解決了我的問題,但後來我意識到組件本身必須知道它是否應該忽略第一個響應,因爲服務無法區分它的訂戶。所以,問題解決了,謝謝! – Akkusativobjekt