2016-09-25 60 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