【发布时间】:2017-06-26 14:54:17
【问题描述】:
我有一个脚本,我想在 node.js 中按计划运行。脚本没有终止和退出。我怀疑这是因为我的数据库客户端仍然打开。
var client = new pg.Client(conString);
client.connect();
function registerBundle (innerHash, outterHash) {
// some stuff here
}
var query = client.query("SELECT id, chain FROM mytable where \
state_ready = true and transaction_id='' ");
query.on('row', function(row) {
var chain = row['chain'];
var pg_record = row['id'];
console.log(pg_record);
var innerHash = "something";
var outerHash = "something else";
var registrar = registerBundle(innerHash, outerHash);
var update = client.query('UPDATE mytable SET transaction_id = $1::text \
where id=$2::int', [transactionHash, pg_record]);
console.log(chain);
});
如果我包含以下内容,客户端连接会在更新有时间触发之前关闭。
query.on('end', function() {
client.end();
});
我无法使用 setTimeout 或任何其他此类机制,因为我不知道等待 registerBundle 函数完成多长时间。另外我认为 query.on('end' 会在更新完成时触发。不知道如何测试。
我的问题,我需要按顺序开火。
- 查询数据库
- 处理每一行(query.on
- 用 registerBundle 返回的值更新每一行
- 处理完所有行后关闭数据库客户端/连接。
- 终止脚本并退出节点
在 python/php 世界中看起来很简单,但在我的 javascript 世界中却分崩离析。
【问题讨论】:
标签: javascript node.js postgresql pg