Skip to content

Instantly share code, notes, and snippets.

@neilcampbell
Last active August 29, 2015 14:25
Show Gist options
  • Save neilcampbell/9289523360ae1b61752a to your computer and use it in GitHub Desktop.
Save neilcampbell/9289523360ae1b61752a to your computer and use it in GitHub Desktop.
ES6 Generators with Promises
(function(target) {
let run = generator => {
let sequence;
let process = result => {
if(result.done) { return; }
result.value
.then(value => {
process(sequence.next(value));
})
.catch(err => {
process(sequence.throw(err));
});
};
sequence = generator();
process(sequence.next());
};
target.async = {
run
};
}(window));
function* main() {
try {
let price = yield getStockPrice();
if(price > 45) {
yield executeTrade();
}
}
catch(ex) {
console.error('failed', ex);
}
}
function getStockPrice() {
return new Promise((resolve, reject) => {
setTimeout(() => {
//reject();
console.log('got price');
resolve(50);
}, 100);
});
}
function executeTrade() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('executed trade');
resolve();
}, 100);
});
}
async.run(main);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment