我有一个 node.js 后端,它使用 Knex.js 根据各种输入动态构建数据库查询。一些输入需要异步处理。我的问题是,我无法从异步函数(或者当然是 Promise 解析函数)返回 knex 查询对象,因为这会触发查询的执行。目前,我需要在将所有异步输入交给查询构建函数之前处理它们,但这确实限制了它们的可组合性。有没有办法阻止 Knex 在异步上下文中执行查询对象?
您需要将构建器包装到函数或对象:
async function returnsQueryBuilder() {
return { builder : knex('mytable').where('foo', 'bar') };
}
const query = (await returnsQueryBuilder()).builder;
因为异步函数实际上包装并解析返回值/promises/thenables 和knex
查询生成器是一个thenable
(https://promisesaplus.com/ https://promisesaplus.com/第 1.2 章)它会自动解决。
出于同样的原因,您也可以直接等待查询构建器以从构建的查询中获取结果。没有 knex 查询生成器thenable
这也行不通:
// returns all the rows of the table
const result = await knex('table');
因此,正如我所说,唯一的选择是不直接返回查询构建器实例,而是将其包装到不是thenable
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)