使用node.js将数据插入Cassandra后,程序似乎仍在等待

时间:2015-02-20 07:59:25

标签: node.js cassandra

我现在对Cassandra和node.js很新。我正在尝试插入200个数据,它们似乎已插入到数据库中。

var client = new cassandra.Client({contactPoints: ['127.0.0.1'], keyspace: 'big'});
var insertRepo = 'INSERT INTO big.repo_info (id, name, full_name) '
    + 'VALUES(?, ?, ?);';

for (var i = 0, len = items.length; i < len; i++) {
    console.log(items[i].id, items[i].name, items[i].full_name);
    client.execute(insertRepo,
                   [items[i].id, items[i].name, items[i].full_name],
                   { prepare : true },
                   function (err) {
                     if (err) {
                       console.log(err);
                     } else {
                       console.log('done')
                     }
                   });
  };

然而,在这次交易之后,似乎程序正在等待没有真正完成的事情。所以,我只需按ctrl-c即可退出该程序。这是正常的还是我需要为此做些什么?

我想我错过了什么。

enter image description here

1 个答案:

答案 0 :(得分:1)

Node.js事件循环将保持活动状态,直到打开连接关闭。

在这种情况下,这意味着您需要致电client.shutdown()

另外,考虑client.execute()是异步操作,因此从同步循环调用它通常不是一个好主意。您可以使用工作流程库,例如async库。

async.timesSeries(items.length, function (n, next) {
  var params = [ items[i].id, items[i].name, items[i].full_name];
  client.execute(insertQuery, params, { prepare: true }, next);
}, function allFinished(err) {
  client.shutdown();
});

检查async.timesSeries()方法以获取更多信息。