如何在函数构造函数中避免 Rx.Subject 但仍然允许早期订阅者

How to avoid Rx.Subject in a function constructor but still allow early subscribers

我在 rxjs 中使用面向对象 JavaScript 并且正在寻找 "nice" 解决方案/如何初始化成员变量的最佳实践,稍后应该是一个可观察的序列,在构造函数。

我现在做什么:

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 不应该使用,因为它是可变的)并且我也想知道是否有更好的方法在可观察序列之间执行 'piping'。

没有 Rx.Subject() 的替代方案会在构造函数中完全描述 this.observableSequence,但您需要对未来 somePromise 的引用,比如 proxyToSomePromise。让 proxyToSomePromise 成为一个可观察的值是很有用的,这样它就可以用来计算 this.observableSequence。所以本质上我们又回到了同样的问题:proxyToSomePromise 应该是一个 Rx.Subject() 因为 somePromise 还不可用。

我看不出如何避免主题。在大多数情况下,您可以使用纯可观察对象,但 Subjects 有其用例,它们是必需的。它们是 Cycle.js too. Its mutability isn't a problem if you encapsulate the subject from the outside world, i.e., use asObservable().

的核心部分