评估异步函数定义
Posted
技术标签:
【中文标题】评估异步函数定义【英文标题】:Evaling async function definitions 【发布时间】:2021-12-19 23:41:12 【问题描述】:我正在开发一个用于 javascript 的 IDE,它允许 开发人员评估他们的代码。 在现代 Chrome 控制台中,我可以运行:
eval(`tryfunction foo3()console.log("Hi") catch(err)console.log(err)`)
和 foo3 将被定义并正常调用。 我也可以跑:
eval(`async function foo4()console.log("Hi")`)
和 foo4 将被定义并正常调用。 但是当我运行时:
eval(`tryasync function foo5()console.log("Hi") catch(err) console.log(err)`)
我没有收到任何错误,但 foo5 未定义。 请注意,示例 1 和 示例 3 只是“功能”之前的“异步”。 我希望 foo5 被定义。 非常感谢线索。
【问题讨论】:
块
中的函数声明由于 Web 兼容性原因而表现异常,通常最好避免。 This 好像也有关系
try
/catch
的意义何在?你永远不会仅仅从定义一个函数中得到一个异常。
感谢 Nick,它有助于实现 jS 的这个灰色地带。
Bergi,程序员可能为函数输入了错误的语法,所以外部的 try/catch 可以帮助捕捉到它。
@user1343035 不,它没有。如果语法无效,则不会运行整个语句。您需要将 try
块放在 eval()
调用周围以捕获语法错误。
【参考方案1】:
好吧,您可以稍微反转您的代码,将try/catch
块包含在您的async
函数中以使其运行。
eval(`async function foo5() try console.log("Hi") catch (err) console.log(err)`);
foo5();
【讨论】:
根据 OP 提供的信息,我假设他们正在编码的 IDE 中的“评估器”是这样的:eval(`try $CUSTOM_CODE_HERE catch(err)console.log(err)`)
,因此将目标函数移到 try
之外可能不会行不通(这就是我的理解)。
好吧,eval
只是执行字符串,就好像它是一段实际的 javascript
代码一样。所以反转代码,我觉得应该可以正常工作。
NullDev,是的,您对我的实际用例做了更好的描述,谢谢。萨尔维诺 我怀疑你是对的。您的回答是对问题的一个非常聪明的“重构”。虽然不是很理想,但只要稍加努力,就可以很好地解决我的问题。
是的,如果您觉得这个答案有用,请接受并点赞。以上是关于评估异步函数定义的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:“未定义”不是函数(评估“$(文档)”)
反应本机路由器通量:TypeError:未定义不是函数(评估'addListener')
r 添加自定义评估函数度量(matthew相关系数)以评估插入符号模型
R语言构建xgboost模型:自定义损失函数(目标函数loss functionobject function)评估函数(evaluation function)