从异步函数返回查询对象时,如何防止 Knex.js 运行查询对象?

2024-04-12

我有一个 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(使用前将#替换为@)

从异步函数返回查询对象时,如何防止 Knex.js 运行查询对象? 的相关文章

随机推荐