A tiny generator helper for consuming callback code directly
function run(generator) { | |
var iterator = generator(resume); | |
var data = null, yielded = false; | |
iterator.next(); | |
yielded = true; | |
check(); | |
function check() { | |
while (data && yielded) { | |
var err = data[0], item = data[1]; | |
data = null; | |
yielded = false; | |
if (err) return iterator.throw(err); | |
iterator.send(item); | |
yielded = true; | |
} | |
} | |
function resume() { | |
data = arguments; | |
check(); | |
} | |
} |
This comment has been minimized.
This comment has been minimized.
Another example showing it can withstand sync callbacks without blowing the stack function decr(x, callback) {
return callback(null, x - 1);
}
run(function*(resume) {
var x = 10000;
while (x) {
x = yield decr(x, resume);
}
console.log("Done");
}); |
This comment has been minimized.
This comment has been minimized.
bevacqua
commented
Mar 8, 2014
I know this is super old but to anyone looking into generators now, |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
creationix commentedJun 11, 2013
Here is an example doing a simple sleep