如何在函数构造函数中避免 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()
.
的核心部分
我在 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()
.