Uma coisa que adoro no JavaScript é que há muitas maneiras de realizar a mesma tarefa, e um exemplo disso é a criação de funções. Há vários padrões para funções; um dos últimos que o senhor vê sendo usado é o new Function method:

/* new Function(arg1, arg2 (...), body) */
const myFunction = new Function('users', 'salary', 'return users * salary');

E se o senhor quiser usar isso new Function para criar uma função assíncrona? O senhor precisa ser um pouco inteligente e, graças ao MDN, temos uma resposta:

// 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 => { ... });

O uso de Object.getPrototypeOf(async function(){}).constructor é muito inteligente, pois um nativo AsyncFunction nativo não existe. Acredito que nunca tenha usado o new Function mas isso não significa que o senhor não use! E agora o senhor pode torná-los assíncronos!