Detect Generator Functions with JavaScript
In the current JavaScript climate of new syntaxes, features, and using loads of external libraries, it seems harder than ever to be sure what your functions are being given or even what the data represents. Of course, we've come up with Flow and TypeScript to help, but we can't count on those always being available. That's why I like doing my own detection with JavaScript, especially when it comes to function types.
To detect if a function is a generator or async generator function, you can use the following code:
// Sample generator function function* sampleGenerator() {} sampleGenerator.constructor.name // "GeneratorFunction" async function* sampleGenerator() {} sampleGenerator.constructor.name // "AsyncGeneratorFunction"
Coincidentally, you can also detect a regular async function with:
async function asyncThing() {} asyncThing.constructor.name // "AsyncFunction"
It's always important to know if the code you're using is sync, async, or a generator, but if you're using external libraries or want to write comprehensive tests, these types of detections may be necessary.