问题标签 [reactive-extensions-js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
46368 浏览

rxjs - rxjs 平面图丢失

我尝试链接多个 rx.js 可观察对象并传递数据。Flatmap应该是合适的操作员,但导入

没有找到:

使用 rx.js 的版本5.0.0-beta.6

0 投票
4 回答
2243 浏览

rxjs - combineAll 不会在空数组上发出

JSBIN 示例

我有一组可变的子组件(POJO 对象),每个子组件都有自己的状态流。每次用户触发 addChild/removeChild/clearChildren 时,都会使用#switchMap 发出一组新的子状态流。到现在为止还挺好!(对 RxJS 感到非常惊讶!)

只要不是空数组Rx.Observable.from(arrayOfStateStreams).combineAll(),我就会得到一个很好的结果。arrayOfStateStreams

由于这是在更高级别上组合(最新)的部分状态,因此我需要发出一个空数组,否则全局状态树将包含不再正确的旧状态数据!

我可以发出一些保留的令牌,例如['EMPTY-ARRAY-PLACEHOLDER-TOKEN'],但这很奇怪。更好的方法是始终将最后一个流附加到数组中,以便可以将最后一个索引视为垃圾。尽管如此,代码和状态仍然令人困惑。使用[null]是不行的,因为我们可以有一个'null'.

任何人都可以很好地解决这个问题?由于在#combineAll 之后不应该有其他空数组表示,因此不能支持这一点吗?

0 投票
2 回答
3556 浏览

javascript - RxJs:只有经过一段时间后的新值

我是 ReactiveExtensions 的新手,我没有开始工作。我认为应该是一个非常常见的用例。我只想在经过特定时间段而没有新的下一个值的情况下接收新值。在下面的示例中,此时间段为 1 秒。debounce -operator似乎完全符合我的要求。我没有让它工作。

我想要得到的只是一个控制台输出:

在我的 IDE (Webstorm) 中,尽管文档声明第二个参数是可选的,但上面的代码甚至无法编译。在jsbin.com 上,我收到以下错误:“this.durationSelector.call 不是函数”(我承认,我还不知道如何在 rxjs 中应用调度程序)。在文档中,他们也只使用一个数字。我在 google 上找到的大多数 debounce 示例仅使用一个数字,即Stackoverflow 上的这个示例。为什么这在我的情况下不起作用?

谢谢你的帮助!

PS:我使用 rxjs 5.0.0-beta.6。

编辑:在这里的答案的帮助下,我确实找到了我想要的实际解决方案:

0 投票
1 回答
32 浏览

javascript - 具有嵌入式查询 RxJs 的人口

我不知道如何解决以下问题。

有一个对象类型:

我从 API 调用中得到了一盒作为 Observable (Angular2) [Fruit[]] 的 fuits,然后我想用另一个 API 调用填充它的“导航属性”,它会返回一个 observable,例如:

我怎样才能用 RxJs 做到这一点?

我尝试了很多方法,有很多映射器,但我还想不通。我也使用了 Observable.from(..) 但没有运气。

谢谢

0 投票
2 回答
814 浏览

javascript - RxJS 5 任务队列,如果任务失败则继续

假设我们有一个触发 AJAX 请求的 HTML 页面。我们要确保 AJAX 请求按顺序执行。下一个 AJAX 请求在前一个完成或出错之前不会被触发。

我试图通过使用 RxJS 的任务队列对此进行建模concatMap。每个 AJAX 请求都被建模为一个Observable. 如果 AJAX 请求成功完成,一切正常,但是如果出错,则不会执行队列中的下一个任务。

这是一个示例,用于setTimeout()模拟长时间运行的异步任务:

这是一个可执行示例:https ://jsfiddle.net/artur_ciocanu/s6ftxwnf/ 。

当我运行此代码时,控制台会打印以下内容: onNext 11 onNext 22 onNext error

这是意料之中的,但我想知道为什么其他任务(如 44、55 等)没有执行。

我很确定我在做一些愚蠢的事情,onErrorResumeNext()或者整个方法可能是完全错误的。

很感谢任何形式的帮助。

0 投票
3 回答
10475 浏览

javascript - ForkJoin 2 BehaviorSubjects

我有两个行为主题流,我试图 forkJoin 没有运气。正如我想象的那样,它返回了它的最后两个值。这有可能以某种方式实现吗?

它不是在主题之后调用的。

0 投票
1 回答
301 浏览

redux - 为什么在中间件内部处理 Observables - vs 调度组合 Observables 的输出?

当我看到所有这些鼓励你调度一个异步发出其他动作的动作的中间件时,我觉得我正在服用疯狂的药丸。我认为异步 CAN(也许应该?)在商店之前完成。

对我来说,Rx 的好处是你可以接收一个传入的动作流,将其中一些映射到其他动作的可观察对象,然后对整个结果进行平面映射以获得一系列有序的事件。然后,您可以通过将每个事件分派给它来将该结果流链接到存储中。

将异步放入操作中不仅会采用 Redux 的简单模型并使其复杂化,而且这意味着当您进行时间旅行调试时 - 您可能会触发新的 AJAX 请求(这可能会在您清理时重写您的历史记录?)。

我想我觉得将 RxJS 的强大功能放在商店前面对我来说很有意义,但我很困惑为什么将它放在商店旁边的库是有意义的。我同意 Observables 是 Epics 的一个很好的模型,但我想知道 Redux 是否正在被用来关心它不应该知道的事情。

背景:我看过这个视频https://www.youtube.com/watch?v=AslncyG8whg,学习 Rx 几年,Redux 半年。

0 投票
2 回答
1578 浏览

angular - 将多个具有不同动作/操作的 Observable 组合起来

我正在构建一个 Angular2 应用程序,所以我已经习惯了 Observables 和 Reactive Extensions 作为一个整体。我正在使用 TypeScript 和 rxjs。

现在我有一个可观察的,或者如果你愿意的话,我有一个流,它包含一些对象的数组。比方说人对象。现在我有另外两个 Person-objects 流,并且想将它们组合起来,所以我得到一个始终是最新的流:

如果 people-stream 发出一个数组,比方说 5 个人,然后 personAdded-stream 发出一个人,allPeople-stream 将发出一个 6 数组。如果 personRemoved-stream 发出一个人,allPeople-流应该发出一个 Person-objects 数组,而不是刚刚由 personRemoved-stream 发出的那个。

rxjs 中是否有内置方法来获得这种行为?

0 投票
1 回答
147 浏览

rxjs - 如何在 rx.js 中使用 bufferWithCount 播种第一个项目?

假设您执行以下操作:

这将返回:

我希望结果看起来像(基本上强制第一个值发出):

0 投票
2 回答
77 浏览

rxjs - RxJS/ReactiveX 正确的模块通信

我对反应式编程很陌生,但已经恋爱了。但是,仍然很难将我的大脑切换到它。我正在尝试遵循所有建议,如“避免使用主题”和“避免不纯函数”,当然还有“避免命令式代码”。

我发现很难实现的是简单的跨模块通信,其中一个模块可以注册“动作”/可观察的,另一个可以订阅并对其做出反应。一个简单的消息总线可能会起作用,但这将强制使用我试图避免的主题和命令式代码样式。

所以这是我正在玩的一个简单的起点:

所以目前第二个模块订阅它“触发”“myAction”Observable。在现实生活中,这可能是一个 ajax 调用。有没有办法让所有订阅者延迟/等待,直到从 module1 正确调用“myAction”?再一次 - 使用主题很容易做到这一点,但我正在尝试按照推荐的做法来做。