Skip to content

Instantly share code, notes, and snippets.

@nirkaufman
Created September 2, 2020 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nirkaufman/5f8534ae4813d78da0414be2647e5a1b to your computer and use it in GitHub Desktop.
Save nirkaufman/5f8534ae4813d78da0414be2647e5a1b to your computer and use it in GitHub Desktop.
const website = `nir.life`
const btn = document.createElement('button');
function map(transformFn) {
return function(inputValueProvider) {
return createObservable(
function (onValue, onError, onComplete) {
inputValueProvider.subscribe(
(value) => onValue(transformFn(value)),
(error) => onError(error),
() => onComplete()
)
}
)
}
}
function filter(conditionFn) {
return function(inputValueProvider) {
return createObservable(
function (onValue, onError, onComplete) {
inputValueProvider.subscribe(
(value) => conditionFn(value) && onValue(value),
(error) => onError(error),
() => onComplete()
)
}
)
}
}
function tap(callback){}
function createObservable(subscribeFn) {
return {
subscribe: subscribeFn,
pipe: function (operator) {
return operator(this)
}
}
}
const numbers$ = createObservable(
function getValues(onValue, onError, onComplete) {
[10, 20, 30].forEach(onValue);
onComplete()
}
)
const click$ = createObservable(
function getValues(onValue, onError, onComplete) {
btn.addEventListener('click', onValue)
}
)
// callbacks
function next(value) {
console.log(value);
}
function error(error) {
console.log(error);
}
function complete() {
console.log('Done!')
}
numbers$
.pipe(map(v => v * 100))
.pipe(filter(v => v !== 2000))
.subscribe(next, error, complete)
click$
.pipe(map(e => ({name: 'event!'})))
.subscribe(next, error, complete)
btn.dispatchEvent(new Event('click'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment