2017-02-09 34 views
1

示例文件流持續更新:如何從一個XML文件

<currencies><usd_gbp>0.80</usd_gbp><usd_eur>0.94<usd_eur></currencies> 

我有一個包含貨幣匯率的XML文件http://somesite.com/curency.xml。該文件定期更新。我希望一個流能夠在更新發生時實時發佈更改。你將如何創建一個實時發佈更新的rx.js可觀察流?

到目前爲止,我一直在看這個例子,但是這一次處理整個文件並結束。 http://schempy.com/2015/10/14/simple_async_with_rxjs/

如何讓steram在發生文件時發出更新?我需要將apiStream合併到一個時間間隔還是有其他方法?

+0

您遇到了什麼問題結合起來呢? – guest271314

+0

添加了一些更多的信息問題 – ddcc3432

+0

還沒有嘗試過'rxjs5',雖然在第5,6行的註釋表明_「這將推動每個匹配 // xml節點,行和錯誤。」_你有沒有試過鏈接?您可以使用'EventSource'來持續流文件,存儲最新版本的文件,然後檢查在最新事件中添加的節點,添加新節點或更改節點時調度自定義函數。 – guest271314

回答

0

除非服務器可以向訂閱者推送更新轉換率的通知(例如通過websockets),否則您會使用常規HTTP請求進行定期輪詢xml文件以進行更改。

Rx.Observable.interval(500) 
    .flatMap(() => getConversionRates()) 
    .subscribe(conversionRate => console.log(`conversionRate: ${conversionRate}`)); 

function getConversionRates() { 
    // implement logic to do one call to the xml file 
    // and emit all conversion rates as observable emissions 
    Return Rx.Observable.from([{ currency: 'usd_gbp', conversion: 0.80}]) 
} 

如果你真的關心一模一樣貨幣+轉換重複排放量,那麼你可以使用.groupBy(x => x.currency)所有的排放量.distinctUntilChanged()