Skip to content

Instantly share code, notes, and snippets.

View DanShappir's full-sized avatar

Dan Shappir DanShappir

  • Wix
View GitHub Profile
const myButton = document.getElementById("myButton");
fromEvent(myButton, "click")
|> reduce(#, acc => acc + 1, 0)
|> forEach(#, count => console.log(count));
function fromEvent(element, event, options) {
return fromCallback(listener => {
element.addEventListener(event, listener, options);
});
}
function fromCallback(emitter) {
let values;
let resolve;
const init = r => [values, resolve] = [[], r];
let valuesAvailable = new Promise(init);
emitter(value => {
values.push(value);
resolve(values);
});
return {
async function* filter(src, op) {
let index = 0;
for await (const value of src) {
if (op(value, index++)) {
yield value;
}
}
}
async function* map(src, op) {
function* map(src, op) {
let index = 0;
for (const value of src) {
yield op(value, index++);
}
}
function* filter(src, op) {
let index = 0;
for (const value of src) {
timedGen() |> filter(#, v => v % 2 === 0) |> forEach(#, v => console.log(v));
const wait = delay => new Promise(resolve => setTimeout(resolve, delay));
async function* timedGen(count = 10) {
for (let i = 0; i < count; i++) {
await wait(1000);
yield i;
}
}
(async function () {
const wait = (value, delay = 1000) => new Promise(resolve => setTimeout(() => resolve(value), delay));
const timedSequence = {
[Symbol.asyncIterator]() {
let count = 0;
return {
next() {
return wait({
value: count++,
done: count > 10
for await (const event of sequence) {
console.log(event);
}
forEach(collection, item => console.log(item));