Skip to content

Instantly share code, notes, and snippets.

@typoerr
Last active April 15, 2017 02:07
Show Gist options
  • Select an option

  • Save typoerr/aa33d7c7e67d412edf03d9e049fe03b5 to your computer and use it in GitHub Desktop.

Select an option

Save typoerr/aa33d7c7e67d412edf03d9e049fe03b5 to your computer and use it in GitHub Desktop.
Observable実装
// [実装して学ぶRxJS - undefined](http://blog.bokuweb.me/entry/min-rxjs)
interface IObserver<T> {
next: (v: T) => any;
complete: () => any;
}
interface Producer<T> {
(observer: IObserver<T>): any;
}
class Observable<T> {
subscribe: (observer: IObserver<T>) => any;
constructor(producer: (observer: IObserver<T>) => any) {
this.subscribe = producer;
}
map<R>(f: (v: T) => R) {
const producer: Producer<R> = (observer) => {
return this.subscribe({
next: (v: T) => observer.next(f(v)),
complete: () => observer.complete()
});
};
return new Observable<R>(producer);
}
static of<T>(...values: T[]) {
const producer = (observer: IObserver<T>) => {
values.forEach(x => observer.next(x));
observer.complete();
};
return new Observable<T>(producer);
}
}
Observable.of(1, 2, 3).map((n => n.toString())).subscribe({
next: (s) => console.log(s),
complete: () => console.log('done')
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment