【问题标题】:Why does this simple nodejs programm with promises run forever?为什么这个带有 Promise 的简单 node js 程序会永远运行?
【发布时间】:2016-11-04 00:43:16
【问题描述】:

我正在运行一个相当简单的 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);
});

【问题讨论】:

  • mssql.connect 设置持久连接,使您的进程保持活动状态。如果您断开与 mssql 的连接,您的进程将退出。

标签: node.js promise


【解决方案1】:

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

如果您希望它在完成当前工作(即挂起的异步任务)后退出,您可以设置process.exitCode = 0,如果出错则设置为 1,这是一个更优雅的退出。

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

【讨论】:

  • 关闭连接确实是我所缺少的。
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 2018-01-31
  • 2012-05-29
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
相关资源
最近更新 更多