基于RxJS Observable.from()
的{{3}},听起来你应该能够传递一个实现可观察界面的对象。但是,以下
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);
}
});
抛出错误
未捕获的TypeError:对象不可观察
我的可观察实施是否不正确?或者我误解了from
?
注意:这是关于Observable界面的更多学术问题 - 我意识到Observable.create()
会在上述情况下起作用。
答案 0 :(得分:2)
你可以“欺骗”RxJS认为你传递它的对象是一个真正的Observable,它实现了一个“符号函数”(我不知道这是什么名称)。但是,您可能永远不需要在实践中这样做,最好使用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
答案 1 :(得分:0)
如果它是一个事件数组,则可以使用Observable.from;如果它是一个简单对象,则可以使用Observable.of。它不必实现任何接口。以下代码是在控制台中打印 a 。
Rx.Observable.from("a").subscribe(data=> console.log(data));