Javascript: 将文本映射到异步函数

Javascript: Map Text to Async function

正在尝试使用 eval() 将文本映射到异步函数。

function sendResponse(input) {
    var inputMap = {
        "help": "await foo1()",
        "player": "await foo2()",
        "company": "await foo3()"
    }
    return inputMap[input] || "Command not found."
}

*sometime later* 

eval(sendResponse(input));

但是它中断了,因为我在 eval 中调用 await。我怎样才能成功做到这一点?

类似于: 但我无法让他们的解决方案起作用。

错误: UnhandledPromiseRejectionWarning: SyntaxError: await is only valid in async function

编辑---------------------------- 以下是应要求提供的真实代码:

function sendResponse(input) {
    var inputMap = {
        "help": "MOD_DISCORD['helpEmbed'].run()",
        "player": "await MOD_PLAYER['playerEmbed'].run(usr)",
        "company": "await MOD_COMPANY['companyEmbed'].run(usr)"
    }
    return inputMap[input] || "Command not found."
}

还有外部方法...这是 await MOD_PLAYER['playerEmbed'].运行(usr)(它在我导出的外部方法中。我知道那部分作品)

async function playerEmbed(pUsername) {
  let returnPackage = await MOD_UTIL['get'].run(`https://www.haloapi.com/profile/h5/profiles/${pUsername}/appearance`);
  let compName = "None"
  let compId = "None"
 
  if (returnPackage.Company != null) {
      compName = returnPackage.Company.Name
      compId = returnPackage.Company.Id
  }
  let embed = new DISCORD.MessageEmbed()
  .setColor('#0099ff')
  .setTitle(returnPackage.Gamertag)
  .setThumbnail(`https://www.haloapi.com/profile/h5/profiles/${pUsername}/emblem?key=${MOD_UTIL.KEY}`)
  .setImage(`https://www.haloapi.com/profile/h5/profiles/${pUsername}/spartan?key=${MOD_UTIL.KEY}`)
  .addFields(
      { name: 'Service Tag', value: returnPackage.ServiceTag},
      { name: 'Highest CSR', value: `${await getRank(pUsername)}`},
      { name: 'Company', value: compName },
      { name: 'Company ID', value: compId, inline: true  },
      { name: 'Created On', value: returnPackage.FirstModifiedUtc.ISO8601Date, inline: true },
      { name: 'Last Modified On', value: returnPackage.LastModifiedUtc.ISO8601Date, inline: true }
  )
  .setTimestamp()
  return embed
}

你必须改变这个:

"await foo1()"

为此:

"(async () => await foo1())()"

其他 foo 功能也是如此。这将解决错误。但是,使用 eval 实现目标的正确方法是:

function sendResponse(input) {
  var inputMap = {
    "help": async () => MOD_DISCORD['helpEmbed'].run(),
    "player": async () => await MOD_PLAYER['playerEmbed'].run(usr),
    "company": async () => await MOD_COMPANY['companyEmbed'].run(usr)
  }
  return inputMap[input] || (async () => await "Command not found.")
}

(async () => await sendResponse(input)())();