Rxjs 从数组的可观察项开始,然后从可观察项推送数组上的项

Rxjs 从数组的可观察项开始,然后从可观察项推送数组上的项,rxjs,observable,reactive-programming,rxjs5,Rxjs,Observable,Reactive Programming,Rxjs5,我奇怪地陷入了以下困境: 我有一个可观测的对象,它要么发射一个包含一些项目的数组,要么发射一个空数组,而这个可观测对象只发射一次,我们称之为startingArray$ 然后我有一个hot observate,它会发出我想在发出startingArray后推送到startingArray的单个项目,我们称之为additions$ 什么代码为我提供了可观察的结果startingArrayPlusAdditions$,它会随着更多项的发射而不断增长 startingArrayPlusAdditio

我奇怪地陷入了以下困境:

  • 我有一个可观测的对象,它要么发射一个包含一些项目的数组,要么发射一个空数组,而这个可观测对象只发射一次,我们称之为
    startingArray$
  • 然后我有一个hot observate,它会发出我想在发出
    startingArray
    后推送到
    startingArray
    的单个项目,我们称之为
    additions$
  • 什么代码为我提供了可观察的结果
    startingArrayPlusAdditions$
    ,它会随着更多项的发射而不断增长
  • startingArrayPlusAdditions$
    应在每次
    additions$
    发出时发出,但在
    startingArray$
    最初发出时不应发出

    • 我不确定我是否理解你的所有问题,但这里有一个建议:

      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$应在每次additions$发射时发射,但不应在startingArray$最初发射时发射


      这是一个可行的建议:

      我不确定我是否理解你所有的问题,但这里有一个建议:

      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$应在每次additions$发射时发射,但不应在startingArray$最初发射时发射


      这里有一个有效的提示:

      我不知道什么时候应该发射
      startingArray$
      。@martin
      startingArray$
      也是一个热可观测对象,所以它决定自己何时发射。所有已知的是,它将只发射一次,它将是一个空数组或包含某些项的数组。一旦
      startingArray$
      发出,那么应该收集
      additions$
      。我不明白什么时候应该发出
      startingArray$
      。@martin
      startingArray$
      也是一个热的可观察对象,所以它决定何时发出。所有已知的是,它将只发射一次,它将是一个空数组或包含某些项的数组。一旦
      startingArray$
      发出,则应仅收集
      additions$
      。。