使用knexjs将数据插入sqlite时遇到问题

时间:2017-02-09 21:38:06

标签: javascript sqlite knex.js

我目前正在使用knexjs将数据插入到sqlite中,但我偶然发现了一个奇怪的问题。

此代码成功插入数据:

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

但是这段代码没有插入数据而是无声地失败:

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

为什么then代码很重要?为什么需要插入数据?

1 个答案:

答案 0 :(得分: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 + spec调用的东西。它可以用于逐个构建查询,并且在用户想要触发它之前不会触发正在构建的查询。

对于那些可靠的东西,一件好事是,如果你从promise中返回它们,它们的.then()函数将被调用并且将触发查询。

所以这可以在不调用内部查询的情况下工作:

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