每次发出几次?

时间:2017-11-08 02:16:26

标签: rxjs reactive

我尝试了以下使用ngrx作为源可观察源的代码。

this.continue$ = this.store.select(s => s.cart)
  .switchMap( cart => Observable.from(cart.items) )
  .every( item => item.amount > 0 && item.amount <= item.max_amount )

我想要做的是,每次发出新的Cart时,测试Cart中的所有项目,如果每个项目都超过某个条件,则发出布尔值。

我尝试使用every()操作,但现在我明白every()永远不会发出一些东西,因为源可观察性永远不会完成。 (如果完成,every()将只发出一次,因为它是如何工作的)

我的问题是,有没有办法解决我的问题,更好(不需要subscribe)而不是

this.store.select(s => s.cart)
  .subscribe( cart => {
    this.continue$ = Observable.from(cart.items)
      .every( item => item.amount > 0 && item.amount <= item.max_amount )
  });

1 个答案:

答案 0 :(得分:0)

我认为这可以胜任。注意,这使用Array.every(),我假设cart.items是一个数组。

this.continue$ = this.store.select(s => s.cart)
  .map( cart => 
    cart.items.every(item =>
      item.amount > 0 && item.amount <= item.max_amount 
    )
  );

实际上,您可能会发现这有效

this.continue$ = this.store.select(s => 
  s.cart.items.every(item =>
   item.amount > 0 && item.amount <= item.max_amount 
  )
);