2015-03-05 6 views
6

Ich lerne node.js und stieß auf knex.js und bookshelf.js, um mit verschiedenen Datenbanken zu interagieren. Ich versuche, ein einfaches KNX-Programm zu starten, aber irgendwie beendet das Programm nicht. Im Folgenden finden Sie das Programm:knex.js db Anruf wird nicht abgeschlossen

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

ich zu debuggen versucht und festgestellt, dass Knex drossel Versprechen verwendet. Ist mein Problem durch unvollständigen Austritt aus einem Versprechen? Danke

Antwort

9

Dies ist, weil die Verbindung zur Datenbank noch offen ist. Fügen Sie den folgenden Code nach der letzten .then(...) und es wird trennen (so den Prozess verlass):

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

Danke, es hat funktioniert! Kannst du mir bitte sagen, ob es endlich möglich ist, das Versprechen zu beenden? Danke noch einmal. –

+1

Sie müssen nicht immer ein Versprechen mit Endlich beenden. Es folgt den Regeln des herkömmlichen 'try {} catch() {} finally 'von Javascript, in dem Sinne, dass der Code innerhalb von' finally 'immer am Ende der Versprechungskette ausgeführt wird. Sie sollten jedoch immer einen 'catch' haben, sonst könnten Sie keine geworfenen Fehler fangen. Bluebird ist klug genug, um sie erneut zu versuchen, wenn es in Ihrer Versprechenskette keinen "Haken" findet. – victorkohl

+1

Mehr zum Thema auf [Bluebird github Seite] (https://github.com/petkaantonov/bluebird#error-handling). – victorkohl

Verwandte Themen