2017-12-22 1 views
2

Ich frage mich, erstellen, wenn es möglich ist, dynamisch eine Asynchron-Funktion wie folgt zu erstellen:Dynamisch Asynchron-Funktion

Wurf
new Function('await Promise.resolve()'); 

Expectedly, der vorherige Code:

Uncaught SyntaxError: await is only valid in async function 
+2

Natürlich kommt es mit dem Vorbehalt, dass Sie das wirklich nie tun sollten, aber ich denke, es ist eine sehr gültige Frage :) –

+0

Warum sollten Sie eine Funktion so erstellen? –

+3

Sie können immer 'neue Funktion (' return async function() {...} ')() '. –

Antwort

0

Verwenden new Function() Syntax Whit ein Rückkehr innen

async function foo() { 
 
    return await new Promise(mext => { 
 
     setTimeout(()=> next('hello there!!'), 3000) 
 
    }) 
 
} 
 

 
var new_async = new Function(`return ${foo.toString()}`)() 
 
console.log(new_async.toString())

1

Verwenden Sie nicht new Function(). Ich würde persönlich sagen, dass es nie zu verwenden, wenn Sie einen Compiler sind, weil:

  1. Es ist hässlich
  2. -Code in Strings ist sooo 90s .. und es ist hässlich

Erstellen von Funktionen dynamisch in js einfach

function functionMaker() { 
    return function() {}; 
} 

daher eine Asynchron-Funktion dynamisch zu schaffen ist einfach:

erfordert, dass Sie einen Funktionsausdruck erklären