Javascript 如何获得;“当前”;观察者在订阅时的值

Javascript 如何获得;“当前”;观察者在订阅时的值,javascript,rxjs,Javascript,Rxjs,我很难探索RxJs的一个特定部分:当你订阅一个可观察的,你只订阅该流中的任何未来事件。与Promises相比,如果promise已解决,则无论何时调用then(),都将获得该值 下面是一个代码示例: var subject=new Rx.subject(); subject.onNext(“旧值”); subject.onNext(“认购前”); subject.subscribe(函数(val){ 文件写入(val); }); subject.onNext(“认购后”) Rx提供两种行为(以

我很难探索RxJs的一个特定部分:当你订阅一个可观察的,你只订阅该流中的任何未来事件。与Promises相比,如果promise已解决,则无论何时调用
then()
,都将获得该值

下面是一个代码示例:

var subject=new Rx.subject();
subject.onNext(“旧值”);
subject.onNext(“认购前”);
subject.subscribe(函数(val){
文件写入(val);
});
subject.onNext(“认购后”)
Rx提供两种行为(以及其他行为)

可用的工具可以让您探索可观察对象的不同行为方式:

  • Rx.Subject
    是最基本的fire and forget变体——如果事件发生时您没有订阅,那么您就看不到它

  • 使用
    new Rx.BehaviorSubject(未定义)
    而不是
    Subject
    ,您将获得您想要的行为,因为
    BehaviorSubject
    表示“可以更改的值”

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

  • 使用
    new Rx.AsyncSubject()
    ,您将一无所获,直到observable完成,此时您将获得最终值(如果再次订阅,则继续获得最终值)。这是承诺的真正Rx模拟,因为它在“解决”(即完成)之前不会产生任何结果,并且之后总是将值提供给订阅的任何人


“尽管经验丰富的Rx开发人员很少需要直接创建主题”-你这么说是什么意思,我有什么地方可以获得更多信息吗?@BenGale在大多数开发人员认为他们需要创建主题的情况下,开发人员正在重新设计现有的RxJs方法,无论是封装异步操作的可观察工厂,还是某种异步流操作。不总是这样。有时一个主题正是你所需要的。但是对这个库不熟悉的开发人员倾向于先看到这个主题,然后再接触它,因为它看起来很熟悉,最后很困难,因为他们没有意识到他们试图做的事情很可能已经实现了。@Brandon有点离题,时间有点晚,但你能解释一下吗“就像有经验的承诺开发者很少需要直接创建承诺一样”?我经常这样做,如果有更好的方式与承诺互动,我想学习它。@EchoLogic我指的是。通常只需要显式创建承诺(或Rx主题)包装非承诺异步源时。@Brandon这并没有说明Rx。我认为,如果不创建新主题,您会错过很多。创建主题有很多原因,可以将异步功能添加到应用程序中,例如,组件之间的通信,而您不想在应用程序中传递组件的状态更糟糕的是,将回调函数从一个组件传递到另一个组件。