Sequelize.js Can';无法解析sequelize.query中的承诺

Sequelize.js Can';无法解析sequelize.query中的承诺,sequelize.js,es6-promise,Sequelize.js,Es6 Promise,这无疑会令人尴尬,但有人能告诉我为什么下面简单的原始查询中的承诺无法解决问题吗?它的续集是4.37.10 谢谢 'use strict'; const Sequelize = require('sequelize'); const options = { dialect: 'postgres', host: 'localhost', database: 'transitdispatch', username: 'postgres', password:

这无疑会令人尴尬,但有人能告诉我为什么下面简单的原始查询中的承诺无法解决问题吗?它的续集是4.37.10

谢谢

'use strict';

const Sequelize = require('sequelize');

const options = {
    dialect: 'postgres',
    host: 'localhost',
    database: 'transitdispatch',
    username: 'postgres',
    password: 'postgres'
};

const sequelize = new Sequelize(options);
const p = new Sequelize.Promise(function(resolve) {
    return sequelize
        .query('SELECT * FROM "Schedule";', {type: sequelize.QueryTypes.SELECT})
        .then((schedules) => {
            return resolve(schedules);
        })
        .catch((error) => {
            console.log(error);
        });
});

p.then((schedules) => {
    console.log(`there were ${schedules.length} schedules`);
});

问题不在于承诺。当无事可做时,节点进程将自动退出。在这种情况下,如果关闭sequelize连接,它应该退出

p.then((schedules) => {
    console.log(`there were ${schedules.length} schedules`);
    sequelize.close();
});
如果您确定要退出,即使还有其他挂起的内容,也可以使用
process.exit()
。你可以用

process._getActiveHandles();
process._getActiveRequests();

找出阻止节点进程退出的原因。

这段代码对我来说很好。您的查询是否成功运行?您好,是的,它成功运行,并且console.log()语句以从数据库返回的正确行数执行。但承诺链仍在某处悬而未决。脚本挂起在命令行,我必须手动停止它。我不明白为什么。我调试了sequelize代码,发现了问题——这和你说的差不多,我的朋友。出于某种原因,sequelize调用了this.connectionManager.getConnection(选项)两次,但只调用了this.connectionManager.releaseConnection(连接)一次。因此,我手动调用了sequelize.close()。我只是在v4上加快了速度,我不记得在sequelize v3中曾经需要这样做;sequelize总是为我关闭连接。close()的文档甚至说“通常这是在进程退出时完成的,因此,如果您正在创建多个实例,并且希望对其中一些实例进行垃圾收集,则只需调用此方法。”因此我不确定文档或代码是否错了。但我有一个解决办法。谢谢