2017-02-09 15 views
1

В настоящее время я использую knexjs для вставки данных в sqlite, но я наткнулся на нечетную проблему.Ошибка ввода данных в sqlite с knexjs

Этот код вставляет данные успешно:

knex.insert({"request":requestquery,"date":date}).into("requests") 
      .then(function (id) {}); 

Но этот код не вставляет данные и не тихо:

knex.insert({"request":requestquery,"date":date}).into("requests") 

Почему then код важно? Почему необходимо вставлять данные?

ответ

0

Если вы не звоните then(), у вас все еще есть построитель запросов, который все еще можно изменить.

var q = knex("requests"); 
q.toString(); 
// 'select * from "requests" 

q.where('id', 1).toString(); 
// 'select * from "requests" where "id" = 1' 

q.orderBy('bar').toString(); 
// 'select * from "requests" where "id" = 1 order by "bar" asc' 

// now query is actually executed and converted to promise 
var promise = q.then(res => console.log('got', res)); 

Так построитель запросов - это то, что обещание Promise A + then thenable. Его можно использовать для сборки запроса по частям, и построенный запрос не запускается, пока пользователь не захочет его запускать.

Одна вещь, которая хороша в следующих действиях, заключается в том, что если вы вернете их из обещания, их функция будет вызвана и запрос будет вызван.

Так это работает без вызова затем внутреннего запроса:

knex('mydata').then(() => { 
    return knex('otherdata'); // no need to call .then here 
}).then(otherDataResults => { 
    console.log(otherDataResults); 
});