Skip to content

Instantly share code, notes, and snippets.

@tetsuharuohzeki
Last active November 13, 2015 08:55
Show Gist options
  • Save tetsuharuohzeki/3e40f6ea435406cad950 to your computer and use it in GitHub Desktop.
Save tetsuharuohzeki/3e40f6ea435406cad950 to your computer and use it in GitHub Desktop.
filter map function for Rx.Observable.
import {Option} from 'option-t';
import {Observable} from 'rx';
type FilterMapFn<T, U> = (v: T) => Option<U>;
function filterMapForObservable<T, U>(source: Observable<T>, op: FilterMapFn<T, U>): Observable<U> {
const filtered = source.flatMap(function(v: T): Observable<U> {
const mapped: Option<U> = op(v);
const result: Observable<U> =
mapped.mapOrElse(function def(): Observable<U> {
return Observable.never<U>();
}, function map(v: U): Observable<U> {
return Observable.return<U>(v);
});
return result;
});
return filtered;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment