gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:48:14 24 4
gpt4 key购买 nike

我正在将面向对象的 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);
});
});
};

在上面的示例中(按原样工作),我基本上等待外部 promise (由我无法控制的库使用者传递)来解析,然后开始将元素从一个可观察序列传输到另一个序列。

我认为我在这里做错了什么,因为代码开销很大。我使用 Rx.Subject 的唯一原因是允许其他外部订阅者在完成 promise 之前订阅 observableSequence。但对于我的 API 使用者,我希望隐藏 .connect() 方法的详细信息。消费者应该只看到 observableSequence 成员并能够随时订阅它。

我宁愿有一个没有Rx.Subject的解决方案(正如一些人建议不应使用Rx.Subject,因为它是可变的),并且我也想知道是否有更好的方法在可观察序列之间执行“管道传输”。

最佳答案

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

我不明白你如何才能避免主题。在大多数情况下,您可以使用纯可观察量,但主题有其用例,它们是必要的。它们是 Cycle.js 的核心部分也。如果您将主题与外界封装起来,即使用asObservable(),那么它的可变性就不是问题。 .

关于javascript - 如何避免函数构造函数中的 Rx.Subject 但仍允许早期订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28489044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com