Skip to content

Instantly share code, notes, and snippets.

@thompsonemerson
Last active September 7, 2017 14:45
Show Gist options
  • Select an option

  • Save thompsonemerson/f1f4d79935b43ca06098c93d8ba4e85b to your computer and use it in GitHub Desktop.

Select an option

Save thompsonemerson/f1f4d79935b43ca06098c93d8ba4e85b to your computer and use it in GitHub Desktop.
Learning the RxJS - Excerpted from the talk by André Staltz (https://youtu.be/uQ1zhJHclvs)
function map(transformFn) {
const inputObservable = this
const outputObservable = createObervable((outputObservable) => {
inputObservable.subscribe({
next: (x) => {
const y = transformFn(x)
outputObservable.next(y)
},
error: (err) => outputObservable.error(err),
complete: () => outputObservable.complete()
})
})
return outputObservable
}
function filter(conditionFn) {
const inputObservable = this
const outputObservable = createObervable((outputObservable) => {
inputObservable.subscribe({
next: (x) => {
if (conditionFn(x)) {
outputObservable.next(x)
}
},
error: (err) => outputObservable.error(err),
complete: () => outputObservable.complete()
})
})
return outputObservable
}
function delay(period) {
const inputObservable = this
const outputObservable = createObervable((outputObservable) => {
inputObservable.subscribe({
next: (x) => {
setTimeout(() => outputObservable.next(x), period)
},
error: (err) => outputObservable.error(err),
complete: () => outputObservable.complete()
})
})
return outputObservable
}
function createObervable(subscribe) {
return {
subscribe: subscribe,
map: map,
filter: filter,
delay: delay
}
}
const arrayObervable = createObervable((ob) => {
[10, 20, 30].forEach(ob.next)
ob.complete()
})
const clickObervable = createObervable((ob) => {
document.addEventListener('click', ob.next)
})
const observer = {
next: (data) => {
console.log(data)
},
error: (err) => {
console.error(err)
},
complete: () => {
console.log('done')
}
}
arrayObervable
.map((e) => e.clientX)
.filter((x) => x < 200)
.delay(2000)
.subscribe(observer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment