RxJS5:扫描运算符转换为ngFor的数组

时间:2017-08-08 16:21:20

标签: angular rxjs5

我正在创建一个实现此目的的流:

  • 获取http数据
  • 获取套接字事件并在每次收到套接字事件时更新初始http数据
  • 将数据转换为Angular' ngFor
  • 的数组

这就是我所拥有的:

this.subscription = this.http.get('httpService')
.switchMap(httpResult => this.socket.get('socketEvent')
        .scan((data, deltas) => {
            _.each(deltas, function (item) {
                switch (item.type) {
                    case 'a':
                        data.a_list[item.id].value = item.val;
                        break;
                    case 'b':
                        data.b_cells[item.id].value = item.val;
                        break;
                }
            });
            return data;
        }, httpResult)
        .startWith(httpResult)
)
//manipulates same object as scan operator?  
.map(data => Object.keys(data.a_list).map(k => data[k]))
.subscribe(data => {
    this.data = data;
});

模板:

<div *ngFor='let item of data'>{{ item }}</div>

第一次工作正常,但在scan运算符内的第二个套接字事件中,数据已转换为数组。似乎。map运算符正在操作scan运算符所在的同一对象。这是正确的吗?

我总是认为scan返回了一个新对象而不是引用,我认为这是在这里发生的事情。

如果是这种情况,我如何将流的输出中的嵌套对象转换为数组并仍然使用scan

0 个答案:

没有答案