[英]How to create an rxjs observable from a method
我想我正在尝试做一些简单的事情,但是我没有运气来解决它。 我想创建一个可观察对象,该对象在调用另一个对象的方法时通知其订阅者。 我认为RxJS Observable是正确的方法,但是我不知道如何创建Observable。 我无权修改handle.ready函数,因为它在DataLib库中。
//Lets say I need to Observe the handle object for when it calls ready().
let handle = DataLib.getDataAsyncronously();
//sometime in the future DataLib will call handle.ready() which means that
//the data is ready.
let myObservable = Rx.Observable.XXXXXX(handle.ready() is called);
myObservable.subscribe(()=>{
//handle.ready() method just got called.
//Do something now that handle.ready() has been called by DataLib.
});
我将如何创建myObservable以便在调用handle.ready()时通知订阅者?
附加到handle的唯一方法是handle.ready()似乎替换了它。
通常,库API更像这样
DataLib.handleDataAsyncronously(handler);
或具有事件发射器的形状(onReady()),而不是这样:
let handle = DataLib.getDataAsyncronously();
我只是假设您的库确实具有您在此描述的API,而不是过分简化它的API。
实现仍然很简单。 做出许多假设,包括仍然需要调用原始handle.ready(),我将编写如下内容:
const originalHandler = handle.ready.bind(handle);
const ready$ = new Rx.Subject();
handle.ready = () => {
originalHandler();
ready$.onNext(true);
}
ready$
.switchMap(Rx.Observable.from(handle.generatedValues)) // I assume this happens?
.subscribe((handleValue) => {
// handle.ready() method just got called.
// Do something now that handle.ready() has been called by DataLib.
// Or work with handleValue
});
如果您的库至少返回一个事件发射器,则可以执行以下类似的操作:
const ready$ = Rx.Observable.fromEvent(handle, 'ready');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.