gpt4 book ai didi

javascript - 使用 Subject 和 Observable 有什么区别,各自的用途是什么?

转载 作者:行者123 更新时间:2023-12-01 15:21:46 24 4
gpt4 key购买 nike

我已经了解了两种不同的方法来制作 Observable。第一个是主题,如下所示:

// file A
const message$ = new Subject();

// file B
message$.subscribe( (message) => console.log(message) );

// file C
message$.next("Hello there!");

这种创建 Observable 的方法使我能够将数据从文件 B 交换到文件 C。

第二种方法是通过 Observable 类,如下所示:
// file A
const click$ = new Observable( function(observer) {
//Alternatively, I can use Observable.create()
document.addEventListener('click', (e) => observer.next(e));
});

// file B
click$.subscribe( (cl) => console.log(cl) );

我可以在 Subject 方式和 Observable 方式之间收集到的主要区别是,我不确定如何在某个文件 C 与 Observable 的订阅者之间进行某种通信。基本上,click$ 没有 .next()方法,观察者方法在我们传递给可观察对象的函数中。

除了这种行为差异之外,使用 Subject 制作的 observables 和使用 Observable 制作的 observables 之间是否存在其他差异?

最佳答案

一个 Subject都是ObservableObserver同时。这使得使用它变得如此诱人,因为您得到了对 Observer 的引用。您可以在代码中传递并从任何您想要的地方发出项目。但是,当您从 Observable 的声明式定义切换到命令式定义时,这会大大增加代码的错误倾向。

一般来说,您应该尽可能使用 Observable 创建函数( offromcreate )。我想说大多数情况可以在没有主题的情况下解决。但是有一个陡峭的学习曲线,因为您必须了解大多数 Observable 创建函数才能遵循该模式。

对于习惯于命令式编码(即:使用像 JS 这样的脚本语言)的开发人员来说,主题可能会更自然,因为它有点类似于回调函数的简单包装对象。有人可能会问,如果它不受欢迎,为什么还要有一个主题。

据此article , 主题仅在一种情况下使用:

To generate a hot observable imperatively and statefully, without any direct external source.



简而言之,这意味着:当您没有任何外部源(如 Observable、Promise 或 Event)并且需要从函数内部多播类的状态时,请使用 Subject。但是,您不应该将该主题暴露给其他人!

我建议你读这篇文章,它会澄清一些事情。

关于javascript - 使用 Subject 和 Observable 有什么区别,各自的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52014334/

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