class Observable {
constructor(private subscriptionFn: Function) {
this.subscriptionFn = subscriptionFn;
}
subscribe(observer: Observer) {
return this.subscriptionFn(observer);
}
map(projectionFunction) {
return new Observable(observer => {
return this.subscribe({
next(val) { observer.next(projectionFunction(val)) },
error(e) { observer.error(e) },
complete() { observer.complete() }
});
});
}
}