gpt4 book ai didi

javascript - 如何在订阅时获取观察者的 "current"值

转载 作者:IT王子 更新时间:2023-10-29 03:01:49 24 4
gpt4 key购买 nike

我很难理解 RxJs 的一个特定部分:当您订阅 Observable 时,您只是订阅了来自该 Stream 的任何 future 事件。与 Promises 相比,如果 Promise 已解决,无论何时调用 then(),您都将获得该值。

这是一个代码示例:

var subject = new Rx.Subject();

subject.onNext('old value');
subject.onNext('before subscription');

subject.subscribe(function(val) {
document.write(val);
});

subject.onNext('after subscription');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.3.24/rx.all.js"></script>

我希望看到“订阅前”和“订阅后”都打印出来,尽管对我来说“旧值”会被删除是有道理的。但似乎 RxJs 不是那样工作的(仅打印“订阅后”)。我怎样才能得到我想要的结果?

最佳答案

Rx 提供这两种行为(以及其他行为)。

different Rx Subjects available 可以让您探索可观察对象的不同行为方式:

  • Rx.Subject 是最基本的即发即弃类型——如果事件发生时您没有订阅,那么您将看不到它。

  • 使用 new Rx.BehaviorSubject(undefined) 而不是 Subject 你会得到你正在寻找的行为,因为 BehaviorSubject 代表一个“可以改变的值”

  • 使用new Rx.ReplaySubject(5),您将在订阅后立即获得 5 个最新值

  • 使用 new Rx.AsyncSubject() 并且在可观察的 完成 之前您将一无所获,届时您将获得最终值(并继续获得如果您再次订阅,则为最终值)。这是 Promises 的真正 Rx 类比,因为它在“解决”(即完成)之前不会产生任何东西,并且之后总是将值提供给任何订阅者。

关于javascript - 如何在订阅时获取观察者的 "current"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28311118/

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