2016-09-25 67 views
3

我正在使用無法換出的第三方庫的項目。它本質上是一個URL源並返回數據。它返回一個承諾。它將返回的數據傳遞迴匿名回調...並不是你傳遞給函數的那一個。在Nodejs中將回調轉換爲RX.Observable

該文檔是參差不齊的,但這裏是他們如何指導您使用他們的庫。

third-party(URLsource, selector, scope)(function(err, data){ /* work with data array here*/ }); 

目前,代碼是一團糟。這在一定程度上會導致回撥地獄和過度使用承諾。

通過觀察數據管道化數據將有助於簡化和清理這個項目很多....但我仍然在學習RXjs,只是觀察者的工作方式。

我想到了這個問題將是一個很好的候選人:

let datapull = Rx.Observable.bindNodeCallback(third-party); 
let result = datapull(URLsource, selector, scope); 
result.subscribe(result => console.log(result), e => console.log("Error: " + e) 

然而,這不起作用,因爲最後一個參數:

third-party(URLsource, selector, scope) 

沒有回調函數。

如何將此第三方功能的結果包裹在RX Observable中?

回答

4

您的使用示例建議第三方API函數返回一個需要回調的函數。

如果是這樣的話,它的第三方呼叫需要被傳遞到bindNodeCallback,而不是函數本身的結果:

let datapull = Rx.Observable.bindNodeCallback(thirdParty(URLsource, selector, scope)); 
let result = datapull(); 
result.subscribe(result => console.log(result), e => console.log("Error: " + e) 
+0

唉......這是現在這麼明顯。謝謝您的幫助! – calbear47