我尝试根据传入的变量(scamId和actorId)调用某个函数,唯一的问题是,当我尝试将intent2作为参数传入时,它似乎无法从我的存储库中找到所需的内容。我从How to execute a JavaScript function when I have its name as a string得到了这个小的函数构建器脚本,我已经将它用于其他一些事情,它工作得很好,但是我不确定如何传入intent2并让它正确地创建函数。当语句没有像if intent2 = "stuff“那样被重载时,它就会起作用,但当我使用下面的格式时就不起作用了。
例如,return语句等同于如果一切工作正常-
return this.intentS1A1Repository.findOne({where: { intent: intentBase }}); const info = this
// how can I format this intent2 so that it works?
const intent2 = {
where:
{ intent: intentBase }
}
const getIntent = "intentS" + scamId + "A" + actorId + "Repository.findOne";
await getIntentFunctionBuilder(getIntent, info, intent2);
async function getIntentFunctionBuilder(functionName: string, context: any, args: any) {
args = Array.prototype.slice.call(arguments, 2);
var namespaces = functionName.split(".");
var func = namespaces.pop();
for(var i = 0; i < namespaces.length; i++) {
context = context[namespaces[i]];
}
return await context[func].apply(context, args);
}任何帮助都将不胜感激!
发布于 2021-03-25 06:36:07
好的,我想出了它,而不是使用那个疯狂的函数,它实际上要简单得多。
const intent2 = {
where:
{ intent: intentBase }
}
const object = "intentS" + scamId + "A" + actorId + "Repository";
return await this[object]["findOne"](intent2)这个小代码片段可以接受重载的参数作为参数,这非常棒。它允许您传入自定义构建的函数,因此您不必使用20个不同的函数来执行基本上完全相同的任务。返回值恰好是这样:
return this.intentS*A*Repository.findOne(intent2);希望你不需要经历我做过的事情来解决这个问题。祝好运。
https://stackoverflow.com/questions/66788600
复制相似问题