Kirk Ouimet Kirk Ouimet - 1 year ago 48
Node.js Question

Is it impossible to tell if a function is a generator function if .bind() has been called on it?

Looks like calling .bind(this) on any generator function breaks my ability to see if the function is a generator. Any ideas on how to fix this?

var isGenerator = function(fn) {
if(!fn) {
return false;

var isGenerator = false;

// Faster method first
// Calling .bind(this) causes to be 'Function'
if( === 'GeneratorFunction') {
isGenerator = true;
// Slower method second
// Calling .bind(this) causes this test to fail
else if(/^function\s*\*/.test(fn.toString())) {
isGenerator = true;

return isGenerator;

var myGenerator = function*() {

var myBoundGenerator = myGenerator.bind(this);

isGenerator(myBoundGenerator); // false, should be true

Answer Source

Since .bind() returns a new (stub) function that only just calls the original with .apply() in order to attach the proper this value, it is obviously no longer your generator and that is the source of your issue.

There is a solution in this node module:

You can either use that module as is or see how they solve it (basically they make the new function that .bind() returns also be a generator).