2016-11-03 4 views
1

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

Вместо этого он выполняет то, что он должен делать, но затем продолжает работать навсегда.

Я забыл что-нибудь, чтобы программа закончила?

Или это просто, что мое ожидание, что программа выйдет, когда все обещания выполнены, неверна, и мне нужно ее закончить вручную?

'use strict'; 
var mssql = require('mssql'); 

var myssqlConfig = { 
    user: '...', 
    password: '...', 
    server: '...', 
    port: 1435, 
    database: '...' 
}; 

mssql.connect(myssqlConfig).then(function() { 

    new mssql.Request() 
    .input('someRow', mssql.VarChar(), 'someValue') 
    .query("SELECT * FROM tableName WHERE someColumn > @someValue") 
    .then(function(recordset){ 
      // do non-relevant stuff with the record set. 
    }) 
    .catch(function(err){ 
     console.log('Error: '+err); 
    }); 
}).catch(function(err) { 
    console.log('Connection Error: '+err); 
}); 
+2

'mssql.connect' устанавливает постоянное соединение, которое поддерживает ваш процесс. Если вы отключитесь от mssql, ваш процесс завершится. – generalhenry

ответ

3

Если вы хотите, чтобы процесс выхода, вы должны вызвать process.exit(). Вы можете отправить ему состояние выхода 0 или 1, чтобы указать, является ли оно чистым или состояние ошибки. Это заставит его немедленно выйти.

Если вы хотите, чтобы он завершил свою текущую работу (то есть ожидающие асинхронные задачи), вы установили process.exitCode = 0 или 1, если это ошибка, это более изящный выход.

Для того, чтобы последние работали, вам также необходимо отключиться от БД, так как открытое соединение будет рассматриваться как ожидающая работа.

+0

Закрытие связи действительно было тем, чего мне не хватало. – Majiy

Смежные вопросы