🧊

new Function() ではなく new AsyncFunction() したい

我ながらニッチなことをやろうとしてるなって思う・・。

普通の生活をしてる分には、活躍する出番はないはず。`eval()`はもっと使わない。

new Function()

const fn = new Function("a", "b", "return a + b");
console.log(fn(2, 6));

という使い方ができる。

ユーザーからコードみたいな文字列を受け取って実行させたいが、`eval()`ほど無秩序にはしたくない時に使う。

`Function`コンストラクタはグローバルに生えてるけど、これで非同期な処理をしたい場合は?

new AsyncFunction()

ってしたいけど、そんなものはグローバルに生えてないのでできない。

が、自作すればよいらしい。

AsyncFunction - JavaScript | MDN

こんな感じに。

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

const code = `
  const a = await myClass.asyncA();
  return b = myClass.asyncB(a);
`;

const asyncFn = new AsyncFunction("myClass", code);
const res = await asyncFn(myClass);