如何通过new Function 的形式,动态创建async 函数

我们知道在js里面,是可以动态的创建函数的,这在很多时候非常有用。

new Function([arg1[, arg2[, ...argN]],] functionBody)

这是因为有有内置的全局构造函数Function,那在js 里面,可以类似的动态创建异步函数AsyncFunction 吗?有全局的构造函数AsyncFunction吗?

我们在控制台尝试一下就知道,并没有全局的构造函数AsyncFunction。

但有一个好消息是,虽然全局的AsyncFunction不存在,但不表示AsyncFunction构造函数不存在,我们可以用一些技巧来获取他。

AsyncFunction=Object.getPrototypeOf(async function(){}).constructor

这时候,我们其实已经拿到了AsyncFunction,可以使用类似的方法来进行动态创建函数了。

new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)

例如:

// Shim for allowing async function creation via new Function
const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;

// Usage
const fetchPage = new AsyncFunction("url", "return await fetch(url);");
fetchPage("/").then(response => { ... });

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction

Leave a Comment

邮箱地址不会被公开。 必填项已用*标注