Skip to content

Instantly share code, notes, and snippets.

@nathggns
Last active August 29, 2015 14:22
Show Gist options
  • Save nathggns/d1a4745f68ae11a1f3c4 to your computer and use it in GitHub Desktop.
Save nathggns/d1a4745f68ae11a1f3c4 to your computer and use it in GitHub Desktop.
Await implemented in ES6.
function await(generatorFunction) {
let gen = generatorFunction();
function next(err, result) {
if (err) {
gen.throw(err instanceof Error ? err : new Error(err));
}
let nextResult = gen.next(result);
let value = nextResult.value;
if (nextResult.done) {
return;
}
value.then(
result => next(null, result),
e => next(e)
);
}
next();
}
function generateRandomNumber() {
return new Promise(resolve => setTimeout(() => resolve(Math.random()), 2000));
}
function makeError() {
return new Promise((r, reject) => reject('Some error'));
}
await(function*() {
try {
console.log('Starting random number generator');
console.log('Random number is', yield generateRandomNumber());
console.log('Starting another random number generator');
console.log('Another random number is', yield generateRandomNumber());
console.log('Throwing error');
yield makeError();
} catch (e) {
console.error('Caught error', e);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment