KnexJS 查询是如何创建的?什么完成了查询?

How are KnexJS queries created? What finalizes the query?

我正在使用 KnexJS 创建查询。不过,我对最终确定查询的内容感到困惑。

例如,这个查询:

knex('someTable').join('someOtherTable', 'someTable.fid', '=', 'someOtherTable.pid').select('someField');

另一种写查询的方式:

knex.select('someField').from('someTable').join('someOtherTable', 'someTable.fid', '=', 'someOtherTable.pid')

我不完全理解您什么时候想在方法 1 上执行方法 1 而不是方法 2,反之亦然。但我真正感到困惑的是 knex 如何“知道”何时完成查询并实际执行查询。任何人都可以阐明这一点吗?如果最后有某种 .build() 方法,那将是有意义的。但是没有它,我很困惑。

Knex 查询在其 .then() 方法被调用时被触发。因为 async/await 关键字在内部调用 Promise 的 .then() 方法,使用带有 knex 对象的 await 关键字也会最终确定它。请注意,Promise.all() 还将尝试调用传递给它的承诺的 .then() 方法,因此 Promise.all() 也将完成 knex 查询。

所以基本上 knex 查询在以下时间完成并传输到数据库:

  1. 你称之为.then()方法

  2. 你用await关键字就可以了

  3. 你传给Promise.all()

但请注意,(2)和(3)实际上只是(1)的不同版本,