您如何 return 从 knex typescript 操作而不是结果进行查询?

How do you return a query from knex typescript operations instead of results?

我正在使用 knex 在我的 sql 数据库上执行操作。有没有办法让我有点懒惰地执行查询? 我的代码看起来像这样

const results = await knex({dbconfig})('table1')
                           .select('col1').where('...')

我想做一些打字稿操作并检查一些条件以执行进一步的操作。 如果我尝试通过简单地编写 results.where('...') 来执行它们,它不会说 TypeError: results.where is not a function.

我现在正在做的是:

if (condition1){
const results = await knex(..).(some operations)
    }
else{
const results = await knex(..).(some operations + some other operarations)
    }

有更好的方法吗?

回答我自己的问题。 我最终删除了 await 并在返回时使用 var nd 放置它,所以现在

var results = knex(...).someOperations(..)
if(condition1)
    results=results.someOtherOperations(..)
else if(condition2)
     results = results.someOtherOps2(..)
return await results

正如我想您已经发现的那样,这里的技巧是使用 Knex returns 的对象。但是,您不必每次都重新分配它,只需调用它的方法即可。所以:

async function getCustomers(options) {
  const customers = knex('customers').where({ someCondition });

  if (options.region) {
    customers.where({ region: options.region });
  }

  return customers;
}

请注意,return awaitasync 函数中是多余的:无论如何,您都必须在调用代码中 await,所以您实际上只是在返回一个承诺。