开发者问题收集

RxJS 中的 Reduce 不返回对象

2019-09-16
587

我正在使用 Angular,但是 reduce() 运算符没有返回我的对象​​。我的代码如下:

我创建了一个接口

interface Example {
  page?: number;
  size?: number;
  name?: string;
}

并且我声明了一个主题来创建一个数据流,在管道运算符内部,我想从通过 this.example$.next() 发送的数据创建一个对象。

exemple$ = new Subject<Example>();

  get$ = this.exemple$
    .pipe(
      startWith({}),
      reduce(
        (obj, item) => {
          Object.keys(item).forEach(data => (obj[data] = item[data]));
          console.log('obj', obj);
          return obj;
        },
        { page: 15, size: 10 } as Example
      ),
      tap(console.log)
    )
    .subscribe();

  ngOnInit() {
    this.exemple$.next({ name: 'John Paul' });
  }

当 Angular 启动时,它会发送数据,然后我在 reducer() 运算符和 tap() 运算符内的 console.log() 中捕获它。

我可以看到 reduce() 内部的数据,但是 tap() 内部什么也没有发生。就像 reduce 没有返回我在其中返回的对象一样。

有人能帮助我吗? 谢谢

1个回答

您的源 Observable 是 exemple$ ,它是一个主题。 reduce() 运算符仅在源 Observable 完成后才会发出,这意味着您需要调用 exemple$.complete() (或有一些完成链的条件)。

也许您正在寻找 scan() ,而不是发出所有中间结果?

martin
2019-09-16