2016-09-25 4 views
3

Я работаю над проектом, который использует стороннюю библиотеку, которую нельзя поменять. Он по существу выходит на источник URL и возвращает данные. Это не возвращение обещание. Он передает возвращаемые данные обратно на анонимный обратный вызов ... Не тот, который вы передаете функции.Преобразование обратного вызова в RX.Observable в Nodejs

Документация является пятнистой, но вот как они инструктируют вас использовать свою библиотеку.

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

Смежные вопросы