从可观察的数组开始,然后从可观察的项目中推送项目

时间:2017-10-01 09:14:42

标签: rxjs observable reactive-programming rxjs5

我很奇怪地坚持以下几点:

  • 我有一个Observable,它发出一个带有一些项目的数组或一个空数组,而这个Observable只发出一次 - 让我们称之为startingArray$
  • 然后我有一个热门的Observable发出单个项目,我希望在startingArray发出startingArray之后推送到additions$ - 让我们称之为startingArrayPlusAdditions$
  • 什么代码给我产生的可观察的startingArrayPlusAdditions$随着更多项目的发射而持续增长?
  • 每次additions$发出时,
  • startingArray$都会发出,但state最初发出时不会发出

1 个答案:

答案 0 :(得分:2)

我不确定我是否了解您的所有问题,但这是一个提案:

const { Observable }  = Rx;

const startingArray$ = Observable.of([1, 2, 3]);

const additions$ = Observable.from([4, 5, 6, 7, 8]);

const startingArrayPlusAdditions$ = startingArray$
  .combineLatest(additions$)
  .scan((acc, current) => {
    const [startingArray, addition] = current;

    if (acc === null) {
      return [...startingArray, addition];
    } else {
      acc.push(addition);
      return acc;
    }
  }, null)
  .do(console.log)
  .subscribe();

输出结果为:

[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]

就像你问的那样:

  

startingArrayPlusAdditions $应该在每次添加$ emits时发出,但是当startingArray $最初发出时它不应该发出

这是一个有效的普朗克:https://plnkr.co/edit/rKXLJrmA7mSzpQgoemlD?p=preview