class Observable {
constructor(producer) {
this.subscribe = producer
}
}
Observable.prototype.of = function (...values) {
const producer = observer => {
values.forEach(v => observer.next(v));
observer.complete();
}
return new Observable(producer)
}
Observable.prototype.map = function (f) {
const producer = observer => {
return this.subscribe({
next(value) { observer.next(f(value)) },
complete() { observer.complete() }
})
};
return new Observable(producer);
}
const observer = {
next: (v) => console.log(v),
complete: () => console.log('complete'),
}
new Observable().of(1,2,3).map(x => x * x).subscribe(observer);