如何使用许多同步Sequelize调用退出节点进程?

时间:2015-11-06 11:33:59

标签: javascript node.js sequelize.js

我有一些看起来像下面的代码。

Post.findAll(){
.then(function (posts) {
    var i;

    for (i in posts) {

        Comment.findAll({where: {post_id: posts[i].id}}){
        .then(function (comments) {
            // do some stuff.

            return;
        });
    }

    return;
});

它运行,但永远不会退出。 Comment调用可以全部同步运行。通常我会按顺序运行,因此会有一系列return次调用。但在这种情况下,它并不重要。这个过程只是挂起,永远不会退出。这是一个cron工作,所以我需要它在解雇所有电话后退出。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

我认为问题在于你没有打电话给Sequelize::close。因此,连接保持打开状态(可能直到某个超时),因此进程不会终止。

来自lib / sequelize.js:

/**
 * Close all connections used by this sequelize instance, and free all references so the instance can be garbage collected.
 *
 * Normally this is done on process exit, so you only need to call this method if you are creating multiple instances, and want
 * to garbage collect some of them.
 */
Sequelize.prototype.close = function () {
  this.connectionManager.close();
};

我有一些测试here证明了这一点:

  • tests/00-demo/run.sh - 正确终止
  • tests/01-demo-no-close/run.sh - 调用close()注释掉,挂起