2015-03-05 2 views
6

Я изучаю node.js и наткнулся на knex.js и bookshelf.js для взаимодействия с различными базами данных. Я пытаюсь запустить простую программу knex, но так или иначе программа не выходит. Ниже приведена программа:knex.js db вызов не завершен

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

Я попытался отладить и обнаружил, что кнукс использует обещания синей птицы. Является ли моя проблема из-за неполного выхода из обещания? Thanks

ответ

9

Это связано с тем, что соединение с базой данных по-прежнему открыто. Добавьте следующий код после Вашего последнего .then(...) и отключит (таким образом, выход из процесса):

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

Спасибо, это сработало! Не могли бы вы рассказать мне, наконец, как закончить обещание? Еще раз спасибо. –

+1

Вам не обязательно всегда заканчивать обещание наконец. Он следует правилам обычного 'try {} catch() {} finally' javascript в том смысле, что код внутри' finally' всегда будет выполняться в конце цепочки обещаний. Однако вы должны всегда иметь «catch», иначе вы не сможете поймать заброшенные ошибки. Bluebird достаточно мудр, чтобы отбросить их, если он не найдет «catch» в вашей цепочке обещаний. – victorkohl

+1

Подробнее об этом на странице [Bluebird github] (https://github.com/petkaantonov/bluebird#error-handling). – victorkohl