Skip to content

Instantly share code, notes, and snippets.

@Teino1978-Corp
Created November 12, 2015 08:35
Show Gist options
  • Save Teino1978-Corp/df4d16b64a47e81ce017 to your computer and use it in GitHub Desktop.
Save Teino1978-Corp/df4d16b64a47e81ce017 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: Rx.Observable<T>, op: FilterMapFn<T, U>): Rx.Observable<U> {
const filtered = source.flatMap(function(v: T): Rx.Observable<U> {
const mapped: Option<U> = op(v);
const result: Rx.Observable<U> =
mapped.mapOrElse(function def(): Rx.Observable<U> {
return Rx.Observable.never<U>();
}, function map(v: U): Rx.Observable<U> {
return Rx.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