如何在JS中通过对象指定调用函数?解决未触发函数提前执行问题
动态数据库查询功能中函数提前执行的问题与解决办法
场景背景
我正在开发一个支持用户动态从数据库获取数据的功能,核心需求包括:
- 用户可自定义指定查询的源表及目标列
- 严格控制用户仅能访问授权范围内的数据
- 通过
modelMap函数建立模型与操作函数的映射关系,实现动态调用逻辑
遇到的问题
最初实现modelMap时,直接在映射对象中绑定了模型对应的操作函数(比如readTask),但调用时发现未触发的函数也会被提前执行——比如用户查询User模型时,readTask也会被执行,导致传入的populates参数不符合Task模型的属性要求,直接触发OperationalError报错。
解决方法
将映射对象中的普通函数替换为箭头函数,通过箭头函数包裹实现逻辑延迟执行;调用时通过await modelMap(...)()的方式触发对应函数执行,即可正常获取符合要求的数据。
错误写法(函数提前执行)
const modelMap = (modelName, populates) => { return { Task: readTask(populates), // 初始化时readTask会直接执行 User: readUser(populates) }[modelName]; };
正确写法(箭头函数延迟执行)
const modelMap = (modelName, populates) => { return { Task: () => readTask(populates), // 仅在调用时执行readTask User: () => readUser(populates) }[modelName]; }; // 调用示例 const queryResult = await modelMap('User', ['profile'])();
内容的提问来源于stack exchange,提问作者TreyCollier
相关产品推荐
相关产品推荐

