Not every function is a constructor. Some quotes from the ECMAScript specification clarify this:
Essential Internal Methods
A function object is an object that supports the [[Call]]
internal method. A constructor is an object that supports the [[Construct]]
internal method. [...] A function object is not necessarily a constructor and such non-constructor function objects do not have a [[Construct]]
internal method.
Async functions are functions that are in the non-constructor category:
CreateDynamicFunction:
NOTE: Functions whose kind is async
are not constructible and do not have a [[Construct]]
internal method or a "prototype"
property.
And:
AsyncFunction Instances:
AsyncFunction instances are not constructors and do not have a [[Construct]]
internal method. AsyncFunction instances do not have a prototype
property as they are not constructible.
Other examples of functions that cannot be constructors:
Function Instances - prototype:
Function objects created using Function.prototype.bind
, or by evaluating a MethodDefinition (that is not a GeneratorMethod or AsyncGeneratorMethod) or an ArrowFunction do not have a "prototype"
property.
Your example code actually runs into an exception because of the above reasons:
Uncaught (in promise) TypeError: Product2 is not a constructor
(for some reason this exception is not logged in the Stack Snippet, but a browser will show it in their console)