Rx.Observable验证流中的项(传递或抛出)

时间:2017-10-30 08:27:37

标签: rxjs reactivex

鉴于Observable中的Stream,我想验证/检查每个项目。如果一个被破坏,我想通过Observable.throw抛出一个错误,因此打破了所有进一步的处理。

我笨重的解决方案是

import * as Rx from 'rxjs'

inputStream.mergeMap(item => (isValid(item))
    ? Rx.Observable.of(item)
    : Rx.Observable.throw(new Error("not valid"))
)

这看起来很难看,因为它构造了一堆不必要的Observables。

有没有更好的方法来检查Observable中的项目?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

如果我理解您的问题,您可以使用takeWhile运算符来执行此操作。例如;

yourObservable.takeWhile(item => {
     //your condition
}).subscribe(i => console.log(i));

当你的表达式为真时,它只需要值。当它变为假时,它就会停止。

您可以从here了解更多信息。您也可以查看this page。我希望它有所帮助!