将RxJS Observable.from与实现Observable接口的对象一起使用
基于for RxJS的将RxJS Observable.from与实现Observable接口的对象一起使用,rxjs,observable,rxjs5,Rxjs,Observable,Rxjs5,基于for RxJS的Observable.from(),听起来您应该能够向它传递一个实现Observable接口的对象。然而,以下情况 const observable = { subscribe(observer) { const subscription = someAsyncProcess(res => observer.next(res)); return { unsubscribe() { subscription.unsubs
Observable.from()
,听起来您应该能够向它传递一个实现Observable接口的对象。然而,以下情况
const observable = {
subscribe(observer) {
const subscription = someAsyncProcess(res => observer.next(res));
return {
unsubscribe() {
subscription.unsubscribe();
}
}
}
};
Rx.Observable.from(observable)
.subscribe({
next(res) {
console.log(res);
}
});
抛出错误
未捕获类型错误:对象不可见
我的可观察实现是否不正确?还是我误解了
注意:这更像是一个关于可观察界面的学术问题——我意识到
可观察。create()
在上述情况下可以工作。您可以使用Observable.from,如果它是一个事件数组或Observable.of,如果它是一个简单的对象。它不必实现任何接口。下面的代码正在控制台中打印a
Rx.Observable.from("a").subscribe(data=> console.log(data));
通过实现一个“符号函数”(我不知道这个函数的正确名称),你可以“欺骗”RxJS,使其认为你传递的对象是一个真正的可观察对象。但是,在实践中可能永远不需要这样做,最好使用Observable.create
const Rx = require('rxjs/Rx');
const Symbol_observable = Rx.Symbol.observable;
const Observable = Rx.Observable;
const observable = {
[Symbol_observable]: function() {
return this;
},
subscribe: function(observer) {
// const subscription = someAsyncProcess(res => observer.next(res));
observer.next(42);
return {
unsubscribe() {
subscription.unsubscribe();
}
}
}
};
Observable.from(observable)
.subscribe({
next(res) {
console.log('Next:', res);
}
});
这张照片是:
Next: 42