让我们考虑以下简化情况:
我要过滤可观察的苹果,以使烂苹果不通过过滤器。更准确地说,当且仅当A.isRotten()发出的第一项为false时,苹果A才会通过过滤器。实施此过滤器的最佳方法是什么?
经过一番思考,我可以想到:
apples
.concatMap(apple =>
apple.isRotten()
.first()
.filter(bool => bool)
.map(bool => apple))
Run Code Online (Sandbox Code Playgroud)
用JavaScript编写的。(... => ...是一个函数)。这行得通,但是我认为这是冗长且难以理解的。有没有更好的方法来做这种事情?
你所得到的很好,而且,说实话,我想不出更简洁的方法。如果无序的苹果不是问题的话,我可能会使用flatMap而不是。concatMap
如果可读性对您来说是一个问题,只需将实现移至它的一个函数中(例如,filterObservable接受一个接受值并返回一个值的函数IObservable<bool>)