Rxjs 可观察验证流中的项目(通过或抛出)

Rxjs 可观察验证流中的项目(通过或抛出),rxjs,reactivex,Rxjs,Reactivex,给定一个可观察对象中的流,我想验证/检查每个项目。如果一个被破坏,我想通过Observable.throw抛出一个错误,从而破坏所有进一步的处理 我笨拙的解决办法是 import * as Rx from 'rxjs' inputStream.mergeMap(item => (isValid(item)) ? Rx.Observable.of(item) : Rx.Observable.throw(new Error("not valid")) ) 这看起来很难看,因

给定一个可观察对象中的流,我想验证/检查每个项目。如果一个被破坏,我想通过Observable.throw抛出一个错误,从而破坏所有进一步的处理

我笨拙的解决办法是

import * as Rx from 'rxjs'

inputStream.mergeMap(item => (isValid(item))
    ? Rx.Observable.of(item)
    : Rx.Observable.throw(new Error("not valid"))
)
这看起来很难看,因为它为正流构造了一堆不必要的观测值


有没有更好的方法来检查可观察对象中的项目?

您可以使用普通
映射,并在其中抛出异常:

inputStream.map(item => {
  if (isValid(item)) {
    return item;
  }
  throw new Error("not valid");
})

您可以仅使用普通
映射
并在其内部引发异常:

inputStream.map(item => {
  if (isValid(item)) {
    return item;
  }
  throw new Error("not valid");
})

如果我能很好地理解您的问题,您可以使用
takeWhile
操作符来执行此操作。比如,

yourObservable.takeWhile(item => {
     //your condition
}).subscribe(i => console.log(i));
当表达式为真时,它只接受值。当它变为false时,它停止


你可以从中学到更多。你也可以退房。我希望有帮助

如果我能很好地理解您的问题,您可以使用
takeWhile
操作符来执行此操作。比如,

yourObservable.takeWhile(item => {
     //your condition
}).subscribe(i => console.log(i));
当表达式为真时,它只接受值。当它变为false时,它停止


你可以从中学到更多。你也可以退房。我希望有帮助

这对于静默验证非常有用。谢谢在这种情况下,我需要抛出错误。仍然感谢。这对于无声验证来说是非常好的。谢谢在这种情况下,我需要抛出错误。还是谢谢你。