Skip to content

Instantly share code, notes, and snippets.

View adambene's full-sized avatar

Adam Bene adambene

View GitHub Profile
@adambene
adambene / delay-with-a-value.js
Created March 8, 2018 00:11
Delay With a Value in JavaScript
const delay = (ms, result) =>
new Promise(resolve => setTimeout(() => resolve(result), ms));
@adambene
adambene / delays-with-async-await.js
Last active April 4, 2018 00:55
Delays With Async/await in JavaScript
async function delays() {
let a = await delay(800, "Hello, I'm in an");
console.log(a);
let b = await delay(400, "async function!");
console.log(b);
}
delays();
@adambene
adambene / delays-with-promise-chaining.js
Last active March 8, 2018 17:06
Delays With Promise Chaining in JavaScript
function delays() {
return delay(800, "Hello, I'm in a").then(a => {
console.log(a);
return delay(400, "Promise!");
}).then(b => {
console.log(b);
});
}
// call it
@adambene
adambene / delays-with-coroutines.js
Last active March 8, 2018 00:10
Delays With Coroutines in JavaScript
function* delays() {
let a = yield delay(800, "Hello, I'm an");
console.log(a);
let b = yield delay(400, "async coroutine!");
console.log(b);
}
// call it
coroutine()(delays());
@adambene
adambene / coroutines-and-generators.js
Last active December 22, 2022 10:38
Coroutines and generators in JavaScript
function* delays() {
let a = yield delay(800, "Hello, I'm an");
console.log(a);
let b = yield delay(400, "async coroutine!");
console.log(b);
}
const coroutine = nextValue => iterator => {
const { done, value } = iterator.next(nextValue);
@adambene
adambene / generator-iterator-for-of.js
Created March 7, 2018 15:58
Generator, iterator, for...of in JavaScript
function* naturals() {
let i = 1;
while (true) {
// it can count to infinity
yield i++;
}
}
for (let i of naturals()) {
// count only to 5
@adambene
adambene / AlternatingArray.js
Created March 6, 2018 14:58
Iterate through an array in an alternating fashion in JavaScript
class AlternatingArray extends Array {
constructor(...args) {
super(...args);
}
*[Symbol.iterator](){
for (let i = 0; i < this.length; i += 2) {
yield this[i];
}
for (let i = 1; i < this.length; i += 2) {
yield this[i];
@adambene
adambene / merge-two-arrays.js
Last active March 7, 2018 19:27
Merge two arrays in JavaScript
// merge two arrays a and b
const merge = (a, b) => a.reduce(
(acc, curr, i) => [
...acc, // copy all previous elements
curr, // current element of a
b[i] // current element of b
],
[] // initial value
);
@adambene
adambene / currying-in-javascript-es6-higher-order-functions.js
Created January 20, 2017 01:29
Currying in JavaScript ES6 - higher order functions
curry = f => a => b => f(a, b)
uncurry = f => (a, b) => f(a)(b)
papply = (f, a) => b => f(a, b)
@adambene
adambene / currying-in-javascript-es6-properties.js
Created January 20, 2017 01:28
Currying in JavaScript ES6 - properties
add = (a, b) => a + b
curriedAdd = a => b => a + b
add(5,6) === 11
curriedAdd(5)(6) === 11
uncurry(curry(add))(5,6) === 11
curry(uncurry(curriedAdd))(5)(6) === 11