【问题标题】:knex.js db call does not completeknex.js 数据库调用未完成
【发布时间】:2015-03-05 02:49:00
【问题描述】:

我正在学习 node.js,遇到了 knex.js 和 bookshelf.js 来与不同的数据库交互。我正在尝试运行一个简单的 knex 程序,但不知何故该程序没有退出。下面是程序:

'use strict';
console.log('Getting knex');
var knex = require('./knex')({
  client: 'mysql',
  connection: {
    host: '127.0.0.1',
    user: 'shankhoneer',
    password: 'password',
    database: 'knex_test'
  }
});
debugger;
console.log('got knex');
knex.schema.createTable('users', function(table) {
  console.log('creating tables');
  table.increments('id');
  table.string('user_name');
}).then (function(msg){
  console.log('Completed creation');
  console.log(msg);
  return {inserted: true};
});

我尝试调试,发现 knex 使用了 bluebird 承诺。我的问题是由于不完全退出承诺吗? 谢谢

【问题讨论】:

    标签: javascript node.js knex.js


    【解决方案1】:

    这是因为与数据库的连接仍处于打开状态。 在最后一个.then( ... ) 之后添加以下代码,它将断开连接(从而退出进程):

    .finally(function() {
      knex.destroy();
    })
    

    【讨论】:

    • 谢谢,成功了!你能告诉我最终是否是结束承诺的方式吗?再次感谢。
    • 你不需要总是用 finally 来结束一个承诺。它遵循 javascript 的常规 try {} catch() {} finally 规则,即 finally 中的代码将始终在 Promise 链的末尾执行。但是,您应该始终拥有catch,否则您可能无法捕获抛出的错误。如果 Bluebird 在你的 Promise 链中没有找到任何 catch,它会重新抛出它们。
    • 关于Bluebird github page的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多