reactive-programming - 将可观察序列转换为仅从最近的可观察序列产生值的可观察序列

标签 reactive-programming rxjs reactive-extensions-js

示例 1:

var obsNumber = /* observable that produce numbers */;
var obsText1 = /* observable that produce text */;
var obsText2 = /* observable that produce text */;
var obsContext = /* IF obsNumber < 5 THEN obsText1 ELSE obsText2 */;

obsContext 是一个 observable,它将根据 obsNumber 的值从 obsText1obsText2 返回数据>.

示例 2:

var arrOfObservables = /* an array of observables */;
var obsNumber = /* observable that produce numbers */;
var obsSelect = /* arrOfObservables[obsNumber] */;

obsSelect 是一个 observable,它将返回来自 arrOfObservables 数组的选定 observable 的数据,该数组由 obsNumber 产生的值确定。

我不知道如何使用 RxJS 指定此行为。在我看来,我需要能够在多个可观察对象之间动态订阅/取消订阅。

如何使用 RxJS 让这两个示例工作?

最佳答案

使用switch :

Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence.

示例 1

var obsNumber,
    obsText1,
    obsText2;

obsNumber = Rx.Observable.interval(500).take(10);
obsText1 = Rx.Observable.return('a');
obsText2 = Rx.Observable.return('b');

   obsNumber
    .do(function (x) {
        console.log('x: ' + x);
    })
    .map(function (x) {
        return x < 5 ? obsText1 : obsText2;
    })
    .switch()
    .subscribe(function (context) {
        console.log('context: ' + context);
    });
<script src='https://rawgit.com/Reactive-Extensions/RxJS/v.2.5.3/dist/rx.all.js'></script>

示例 2

var obsNumber,
    arrOfObservables;

obsNumber = Rx.Observable.range(0, 3);

arrOfObservables = [
    Rx.Observable.return('a'),
    Rx.Observable.return('b'),
    Rx.Observable.return('c')
];

obsNumber
    .do(function (x) {
        console.log('x: ' + x);
    })
    .map(function (x) {
        return arrOfObservables[x];
    })
    .switch()
    .subscribe(function (context) {
        console.log('context: ' + context);
    });
<script src='https://rawgit.com/Reactive-Extensions/RxJS/v.2.5.3/dist/rx.all.js'></script>

关于reactive-programming - 将可观察序列转换为仅从最近的可观察序列产生值的可观察序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17362902/

相关文章:

node.js - RxJS + node.js HTTP 服务器实现?

angular - 您必须取消订阅组件中的 QueryList 吗?

javascript - 我需要使用 JavaScript 可视化动态集合,可以使用响应式扩展来实现吗?

java - 为什么我的 RxJava Observable 仅向第一个消费者发出?

elasticsearch - 用于 Elasticsearch 的响应式(Reactive) API

swift - 如何在不创建无限循环的情况下让 RxSwift 中的主题将值推送给自身

redux - 为什么要在中间件内部处理 Observables,而不是调度组合 Observables 的输出?

spring - 执行时间响应式编程

Angular observable 不过滤 json 数组结果

javascript - 使用 flatMapLatest 处理错误并重试