【发布时间】:2020-07-19 11:08:28
【问题描述】:
尝试使用 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。我怎样才能成功地做到这一点?
类似于:await is only valid in async function - eval in async,但我无法让他们的解决方案发挥作用。
错误:
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'].run(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
}
【问题讨论】:
-
我一定会编辑的。
-
哦,你知道吗,我错了,我想我知道发生了什么(将添加答案)
标签: javascript mapping eval