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

After inserting data into Cassandra with node.js, the program seems like it is still waiting

我现在对 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 退出程序。这是正常现象还是我需要为此做些什么?

我想我错过了什么。

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() 方法以获取更多信息。