Создать цепочку методов до того, как объект существует - PullRequest
0 голосов
/ 14 ноября 2018

Допустим, я использую knex для выполнения запросов к базе данных SQL. Я объединяю несколько методов для построения запроса.

Например:

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();
  })

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете создать функцию, которая принимает начальный параметр в цепочке:

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();
  })
0 голосов
/ 14 ноября 2018

Конечно.

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();
  })
...