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.
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.
Here is an example doing a simple sleep