从RxJS还原不会返回对象

时间:2019-09-16 22:45:32

标签: angular rxjs

我正在使用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启动时,它发送数据,并在console.log()运算符和reducer()运算符内的tap()中捕获数据。

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

有人可以帮助我吗? 谢谢

1 个答案:

答案 0 :(得分:1)

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

也许您正在寻找会发出所有中间结果的scan()