2015-03-05 10 views
6

Sto imparando node.js e ho incontrato knex.js e bookshelf.js per interfacciare database diversi. Sto cercando di eseguire un semplice programma knex ma in qualche modo il programma non si chiude. Di seguito è riportato il programma:knex.js chiamata db non completa

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

ho cercato di eseguire il debug e ha scoperto che knex utilizza promesse Bluebird. Il mio problema è dovuto all'uscita incompleta da una promessa? Grazie

risposta

9

Questo perché la connessione al database è ancora aperta. Aggiungere il seguente codice dopo l'ultima .then(...) e si disconnette (uscendo così il processo):

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

Grazie, ha funzionato! Puoi dirmi se è finalmente il modo di porre fine alla promessa? Grazie ancora. –

+1

Alla fine non è necessario terminare sempre una promessa. Segue le regole del convenzionale 'try {} catch() {} finally' di javascript, nel senso che il codice all'interno di' finally' sarà sempre eseguito alla fine della catena di promesse. Dovresti, comunque, avere sempre un 'catch 'oppure potresti non ricevere errori lanciati. Bluebird è abbastanza saggio da ricrearli se non trova alcun 'catch 'nella tua catena di promesse. – victorkohl

+1

Ulteriori informazioni sulla [pagina github Bluebird] (https://github.com/petkaantonov/bluebird#error-handling). – victorkohl