如何使用RxJS运算符创建可观察的自定义对象流

时间:2016-09-28 15:45:59

标签: javascript typescript rxjs

我目前的输入内容如下

const config = {
  'mainA': { sub1: { name: 'test1'}, sub2: { name: 'test2'}},
  'mainB': { sub1: { name: 'test3'}, sub2: { name: 'test4'}}
};

我正在尝试编写一个函数(createCustomObservable),它将使用标准RsJS运算符创建一个observable,如下所示

var observable = createCustomObservable(config);
observable.subscribe((x) => console.log(x));

控制台输出应如下所示

{'mainA': 'test1'} -> {'mainA': 'test2'} -> {'mainB': 'test3'} ->  {'mainB': 'test4'} 

一系列具有单一属性的物体

有没有人知道如何使用RxJS运算符实现这一点?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您尝试解决的问题的主要问题是遍历对象以获取包含" name"的所有对象。领域,并获得他们的价值。

没有Rx操作员自动执行此操作,因此要完成此任务,您只需使用id | column1 | column2 | timestamp 6 | 6 | 3 | 2016-09-27 00:20:20 9 | 9 | 3 | 2016-09-30 00:20:20 5 | 5 | 4 | 2016-09-25 00:20:20 3 | 3 | 4 | 2016-09-24 00:20:20 7 | 7 | 5 | 2016-09-28 00:20:20 8 | 8 | 5 | 2016-09-28 00:24:20 - https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/create.md

Rx.Observable.create

示例:https://jsbin.com/yolufovubi/edit?js,console

答案 1 :(得分:1)

我们可以通过Observable构造函数创建一个新的流,您必须手动调用next(),error()和complete()函数。

function createCustomObservable(config) {
   return new Observable(
      observer => {
         try {
           observer.next(config)
        } catch(err) {
          observer.error(err);
       } finally {
         observer.complete();
      }
    })
 }

并以这种方式使用

var observable = createCustomObservable(config);
observable.subscribe((x) => console.log(x));