在对象存在之前创建方法链

Create method chain before object exists

假设我正在对 SQL 数据库使用 knex 到 运行 查询。我链接了一些方法来构建查询。

例如:

const sqlConfig = require('./sql.config');

var knex = require('knex')(sqlConfig);

knex.select("*")
  .from("books")
  .where("author", "=", "José Saramago")
  .then((rows) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  })
  .finally(() => {
    knex.destroy();
  })

现在,我的问题是:

有没有办法在创建knex对象之前存储方法链,并在创建后调用它?

像这样:

const methodChain = <<<
  .select("*"),
  .from("books"),
  .where("author", "=", "José Saramago")
>>>

const sqlConfig = require('./sql.config');

var knex = require('knex')(sqlConfig);

knex
  .methodChain()
  .then((rows) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  })
  .finally(function() {
    knex.destroy();
  })

当然可以。

const methodChain = (x) => x
    .select("*"),
    .from("books"),
    .where("author", "=", "José Saramago");

然后

methodChain(knex)
  .then((rows) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  })
  .finally(function() {
    knex.destroy();
  })

您可以创建一个接受链中初始参数的函数:

function methodChain(in) {
  return in.select("*")
           .from("books")
           .where("author", "=", "José Saramago");
}

methodChain(knex)
  .then((rows) => {
    console.log(rows);
  })
  .catch((err) => {
    console.log(err);
  })
  .finally(function() {
    knex.destroy();
  })