Retrieving generator references

Nicholas C. Zakas standards at nczconsulting.com
Sat Nov 22 16:55:20 PST 2014


After playing around with generators for most of the day (and pretty 
much loving all of it), I ended up with a code example for async that 
looks like this:

```
var fs = require("fs");

var task;

function readConfigFile() {
     fs.readFile("config.json", function(err, contents) {
         if (err) {
             task.throw(err);
         } else {
             task.next(contents);
         }
     });
}

function *init() {
     var contents = yield readConfigFile();
     doSomethingWith(contents);
     console.log("Done");
}

task = init();
task.next();
```

The thing that immediately jumped out at me was how poorly the `task` 
variable is being managed. So I was poking around trying to see if there 
was a way to get a reference to the generator instance from within the 
generator itself so I could pass it around, such as:

```
function *init() {
     var contents = yield readConfigFile(this);
     doSomethingWith(contents);
     console.log("Done");
}
```

Of course, `this` isn't a reference to the generator itself, but rather 
the this-binding for the function. It struck me, though, that my example 
could be a lot cleaner if I could get a reference to the generator from 
the generator function and pass that around rather than having to manage 
that reference outside.

Now to my question: is there a way to get a reference to the generator 
from inside the generator function?

(Also, sorry if I'm getting the nomenclature wrong, still trying to wrap 
my head around the relationship between generators, iterators, and 
functions.)

-- 
___________________________
Nicholas C. Zakas
http://www.nczonline.net



More information about the es-discuss mailing list