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

2023-12-20

我很难理解 RxJ 的一个特定部分:当你订阅一个 Observable 时,你只是订阅了任何一个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 提供这两种行为(以及其他行为)。

The 不同的接收主题 https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/subjects.mdavailable 可以让您探索 observables 的不同行为方式:

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

  • Use new Rx.BehaviorSubject(undefined)代替Subject你得到了你正在寻找的行为,因为BehaviorSubject代表“可以改变的值”

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在订阅时获取观察者的“当前”值 的相关文章

  • 不使用Vue可以使用Vuex吗? (Vuex 服务器端?)

    Vuex 抱怨如果不调用 Vue use Vuex 就无法创建新的 store 实例 虽然这通常没问题 但我正在摆弄使用同一商店编写后端 前端的想法 有人知道答案吗 Thanks TL DR 你可以在 Node 中完美使用 Vuex 无需浏
  • 查看 chrome 开发者工具中的更改差异

    devtools 可以显示原始文件和当前修改之间的差异吗 或者对于 CSS 来说是修改后的选择器及其新值的列表 我知道 本地修改 每次更改的历史 但不是原始的 当前 映射到工作区 将修改后的文件保存到其源中 源地图 请参阅预处理源 SCSS
  • 更新标记文本谷歌地图API

    因此 我在我的网站上使用 Google 地图 API 并且希望标记文本等于另一个 html 元素的值 这里有人知道如何更新 google 地图 API 中标记的文本属性的值吗 这是我关于该问题的代码 var map marker var i
  • JavaScript 文件中的快速低冲突非加密哈希

    我正在寻找一种用 JavaScript 实现的低冲突的快速哈希 它不需要是加密哈希 我基本上使用它作为查看给定文件是否已上传 或部分上传 到用户帐户的方式 以节省他们在大型 视频 文件上上传的时间 我正在使用新的 HTML5 文件 API
  • 如何使用 TypeScript 和 Angular 2 将插件添加到 ng2-ckeditor ?

    我正在尝试添加Justify插件到我的 ckeditor 但不幸的是我找不到任何关于如何将插件添加到 ng2 ckeditor 的信息 另外 我找不到任何应该添加插件的目录或配置文件 我正在使用 ng2 ckeditor1 0 6使用 Ty
  • 如何在 .tsx 打字稿中包含 .css 文件?

    如何在 tsx 中包含 css 文件以及如何使用它 即我如何渲染静态文件 import as React from react import Header from header import home css export class H
  • Redux - 异步加载初始状态

    我正在尝试找出最简洁的方法来加载来自 API 调用的 Redux 存储的初始状态 据我所知 提供初始状态的典型方法是在页面加载时在服务器端生成它 并将其作为简单对象提供给 Redux createStore 但是 我正在编写一个应用程序 计
  • vue如何检测页面是否刷新?

    我尝试这样 created window addEventListener beforeunload function event event returnValue Write something this router push 像这样
  • 无法在react-native android中设置ShadowColor

    环境 环境 操作系统 macOS High Sierra 10 13 1 节点 8 9 1 纱线 0 17 10 npm 5 6 0 守望者 4 7 0 Xcode Xcode 9 2 内部版本 9C40b Android Studio 2
  • 访问指令的范围与嵌入内容隔离

    我不确定这是否真的可能 但我本质上想要 AngularJS 中 隔离范围的反转 这里有一个Plunkr http plnkr co edit 3xL5MrdJSfYH22ivkYJS展示 基本上 我设置了一个自定义指令来提供一些可重用的 H
  • 如何将滚动条更改为自定义设计? (避免使用默认浏览器外观)

    在新的 Gmail 中 您可以看到有一个滚动条 但它看起来与浏览器滚动条不同 怎样制作呢 你看到的是WebKit 特定的重新设计 http css tricks com custom scrollbars in webkit 浏览器的滚动条
  • Javascript - 将类型化数组保存为 blob 并以二进制数据读回

    我有一个充满二进制数据的类型化数组 它是从 ArrayBuffer 生成的 var myArr new Uint8Array myBuffer 我将其呈现给用户 var blob new Blob myArr type octet stre
  • 使用 Leaflet 加载页面时 moveend 事件多次触发

    我需要在地图平移或缩放时执行一些操作 因此我向该事件附加了一个回调moveend map on moveend function code stuff 它工作正常 但是当页面加载时 该事件被触发三次 我不知道为什么 可能是因为在创建过程中地
  • 与 raphael 一起制作路径动画

    我仍在试图弄清楚拉斐尔 并被一些基本的动画所困扰 看看这里 http jsfiddle net d7d3Z http jsfiddle net d7d3Z 这很简单 两条动画到位的路径 但我想要的是它看起来像一条线一样 绘制 而不是一起开始
  • 从数组中提取值并将其转换为字符串的最佳方法是什么(允许 ES6)?

    我正在尝试采用这样的数组 location Id 000 000 Name Foo Id 000 001 Name Bar etc 提取 Id 并将它们组合成单个字符串 同时在每个值前面附加一个静态字符串 myId 的最有效 最干净的方法是
  • JavaScript Element.requestFullscreen() 未定义

    如果我如何使用代码element requestFullscreen 是未定义的 if element webkitRequestFullScreen element webkitRequestFullScreen If requestFu
  • 如何将 Jitsi Meet 添加到 Vuejs

    我已在 public html 的正文中加载了 jitsi meet 脚本 并且我有一个组件 如下所示
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • float:使所有 Y 轴的刻度线对齐

    我有一个流程图 除了第一个 Y 轴之外 还使用具有不同数字刻度的辅助 Y 轴 我的问题是辅助刻度标签与第一个浮动轴制作的网格线不对齐 Flot 似乎正在运行一些内部算法来决定为轴显示多少个刻度标签 它对每个轴分别执行此操作 从而产生了我遇到
  • Json 对象 - 获取键和值

    我是 JSON 的新手 所以 如果这是一个非常基本的疑问 请不要责骂我 我有一个 JSON 对象引用 我想获取 Key 对象只有一个键值对 我如何在 Java 中获得它 您可以使用jsonObject keys 获取所有钥匙 然后您可以迭代

随机推荐