我正在使用面向对象的JavaScript与rxjs,我正在寻找一个“好的”解决方案/最佳实践,如何初始化一个成员变量,后来应该是一个可观察的序列,在构造函数中。
我现在做的事情:
var myObject = function() {
this.observableSequence = new Rx.Subject();
};
myObject.prototype.connect = function(somePromise) {
var self = this;
somePromise.done(function(anotherSequence) {
anotherSequence.forEach(function(element) {
self.observableSequence.onNext(element);
});
});
};
在上面的示例中(它按原样工作),我基本上等待外部承诺(由不受我控制的库使用者传递)来解析然后从一个可观察序列开始管道元素到另一个序列。
我认为我在这里做错了,因为代码很多。我使用Rx.Subject
的唯一原因是允许其他外部订阅者在完成承诺之前订阅observableSequence
。但对于我的API使用者,我希望隐藏.connect()方法的详细信息。消费者只要看到observableSequence
会员,就可以随时订阅。
我宁愿有一个没有Rx.Subject
的解决方案(因为有人认为不应该使用Rx.Subject,因为它是可变的)并且我也想知道是否有更好的方法来执行'管道'在可观察的序列之间。
答案 0 :(得分:1)
没有Rx.Subject()的替代方法会在构造函数中完全描述this.observableSequence
,但您需要引用未来somePromise
,比如proxyToSomePromise
。让proxyToSomePromise
成为可观察对象是有用的,因此它可用于计算this.observableSequence
。基本上我们回到了同样的问题:proxyToSomePromise
应该是一个Rx.Subject(),因为somePromise
尚不可用。
我看不出你怎么能避免主题。在大多数情况下,您可以使用纯粹的可观察量,但受试者有其用例,它们是必需的。它们也是Cycle.js的核心部分。如果您从外部世界封装主题,即使用asObservable()
,它的可变性不是问题。