为什么这个带有promises的简单nodejs程序会永远运行?

时间:2016-11-03 16:41:35

标签: node.js promise

我正在运行一个相当简单的nodejs程序,该程序从mssql数据库中取出一些行,对它们执行某些操作,然后退出。

相反,它会按预期执行,但随后会一直运行。

我忘记了让程序完成的任何事情吗?

或者仅仅是因为我希望程序在所有承诺都已完成时退出是错误的,我需要手动终止它吗?

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

1 个答案:

答案 0 :(得分:3)

如果您希望退出流程,则必须致电process.exit()。您可以向它发送退出状态0或1,以指示它是干净还是错误状态。这将导致它立即退出。

如果你希望它在完成当前工作后退出(即待处理的异步任务),你设置process.exitCode = 0或者如果它出错,则设置为1,这是一个更优雅的退出。

要使后者工作,您实际上也需要断开与DB的连接,因为打开的连接将被视为待处理的工作。