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



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

此代码成功插入数据:

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

但是此代码不会插入数据并且以静默方式失败:

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

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

如果不调用 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 +规范调用的。它可用于逐个构建查询,并且在用户想要触发它之前不会触发正在构建的查询。

关于 thenable 的一个好处是,如果你从 promise 返回它们,它们的 .then() 函数将被调用并触发查询。

因此,这无需调用内部查询即可工作:

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

相关内容

  • 没有找到相关文章

最新更新