Skip to content

Instantly share code, notes, and snippets.

Last active Nov 27, 2017
What would you like to do?
A tiny generator helper for consuming callback code directly
function run(generator) {
var iterator = generator(resume);
var data = null, yielded = false;;
yielded = true;
function check() {
while (data && yielded) {
var err = data[0], item = data[1];
data = null;
yielded = false;
if (err) return iterator.throw(err);
yielded = true;
function resume() {
data = arguments;
Copy link

creationix commented Jun 11, 2013

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);

Copy link

bevacqua commented Mar 8, 2014

I know this is super old but to anyone looking into generators now, iterator.send(item) should now be

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment