Skip to content

Instantly share code, notes, and snippets.

View mightyguava's full-sized avatar

Yunchi Luo mightyguava

View GitHub Profile
@mightyguava
mightyguava / generator-internals-counts-state-machine.js
Created March 12, 2017 18:49
Demystifying Async Programming in Javascript - Generator internals counts state machine
function counts(start) {
let state = 0;
let done = false;
function go() {
let result;
switch (state) {
case 0:
result = start + 1;
state = 1;
break;
@mightyguava
mightyguava / generator-internals-printer-state-machine.js
Created March 12, 2017 18:49
Demystifying Async Programming in Javascript - Generator internals printer state machine
function printer(start) {
let state = 0;
let done = false;
function go(input) {
let result;
switch (state) {
case 0:
console.log("We are starting!");
state = 1;
break;
@mightyguava
mightyguava / generator-internals-adder.js
Created March 12, 2017 18:50
Demystifying Async Programming in Javascript - Generator internals adder
function* adder(initialValue) {
let sum = initialValue;
while (true) {
sum += yield sum;
}
}
@mightyguava
mightyguava / generator-internals-adder-state-machine.js
Created March 12, 2017 18:51
Demystifying Async Programming in Javascript - Generator internals adder state machine
function adder(initialValue) {
let state = 'initial';
let done = false;
let sum = initialValue;
function go(input) {
let result;
switch (state) {
case 'initial':
result = initialValue;
state = 'loop';
@mightyguava
mightyguava / generator-internals-reverting-adder.js
Created March 12, 2017 18:58
Demystifying Async Programming in Javascript - Generator internals reverting adder
function* adder(initialValue) {
let sum = initialValue;
let lastSum = initialValue;
let temp;
while (true) {
try {
temp = sum;
sum += yield sum;
lastSum = temp;
} catch (e) {
@mightyguava
mightyguava / generator-error-propagation-solution.js
Created March 12, 2017 19:04
Demystifying Async Programming in Javascript - Generator internals error propagation
function adder(initialValue) {
let state = 'initial';
let done = false;
let sum = initialValue;
let lastSum;
let temp;
function go(input, err) {
let result;
@mightyguava
mightyguava / fetchJson-async-await.js
Created March 12, 2017 19:11
Demystifying Async Programming in Javascript - fetchJson async await
async function () {
var user = await fetchJson('/api/user/self');
var interests = await fetchJson('/api/user/interests?userId=' + self.id);
var recommendations = await Promise.all(
interests.map(i => fetchJson('/api/recommendations?topic=' + i)));
render(user, interests, recommendations);
}();
@mightyguava
mightyguava / co-simple-challenge.js
Last active March 12, 2017 19:19
Demystifying Async Programming in Javascript - co() simple challenge
function deferred(val) {
return new Promise((resolve, reject) => resolve(val));
}
co(function* asyncAdds() {
console.log(yield deferred(1)); // 1
console.log(yield deferred(2)); // 2
console.log(yield deferred(3)); // 3
return 4;
}).then(function (result) {
@mightyguava
mightyguava / co-simple-solution.js
Last active March 12, 2017 19:18
Demystifying Async Programming in Javascript - co() simple solution
function co(generator) {
return new Promise((resolve, reject) => {
const g = generator();
function next(nextVal) {
const ret = g.next(nextVal);
if (ret.done) {
return resolve(ret.value);
}
@mightyguava
mightyguava / co-error-challenge.js
Created March 12, 2017 19:20
Demystifying Async Programming in Javascript - co() error challenge
function deferred(val) {
return new Promise((resolve, reject) => resolve(val));
}
function deferReject(e) {
return new Promise((resolve, reject) => reject(e));
}
co(function* asyncAdds() {
console.log(yield deferred('We are starting!'));