class Observable {
constructor(subscribe) {
this._subscribe = subscribe;
}
subscribe(observer) {
return this._subscribe(observer);
}
static timeout(time) {
return new Observable(function subscribe(observer) {
const handle = setTimeout(() => {
observer.next()
observer.complete()
}, time)
return {
unsubscribe() {
clearTimeout(handle)
}
}
})
}
static numbers() {
return new Observable(function subscribe(observer) {
let loop = true;
for (let num = 0; loop; num++) {
observer.next(num);
}
return {
unsubscribe() {
num = 0;
loop = false
}
}
})
}
static fromEvent(dom, eventName) {
return new Observable(function subscribe(observer) {
const nextEvent = ev => observer.next(ev)
dom.addEventListener(eventName, nextEvent)
return {
unsubscribe() {
dom.removeEventListener(eventName, nextEvent)
}
}
})
}
map(projection) {
return new Observable(function subscribe(observer) {
})
}
}