我有一个对象的数组,我需要迭代,并将每个项目插入到DB(postgres)中。我正在使用_.each
来迭代数组。
arr = [
{name: 'Aaron', description: 'First'},
{name: 'Brian', description: 'Second'},
{name: 'Chris', description: 'Third'}
]
var i = 0;
_.each(array, function(lt){
var client = new pg.Client(self.getConnString());
client.connect(function(err) {
if (err) {
//doSomething//
}
var sql = 'insert into load_test (name,description) values(\''+lt.name+'\', \''+lt.description+'\')';
console.log(i + " <- query: " + lt.name + " desc: " + lt.description);
query = client.query(sql);
query.on('end', client.end.bind(client));
i++;
});
});//each
如何以每次查询执行异步的方式编写此函数(_each
)?
由于
答案 0 :(得分:0)
最后,解决方案如下所示:
self.InsertLT = function(index, callback){
var client = new pg.Client(self.getConnString());
if (index < arr.length){
//console.log('index = ' + index);
var sql = 'insert into table (name,description) values(\''+arr[index].name+'\', \''+arr[index].description+'\')';
//console.log(sql);
client.connect(function(err) {
if (err) {
logger.error(self.ERR_CONNECT_TO_DB + ' --> ' + err);
callback(-1);
}
client.query(sql, function(err, result){
if (err){
logger.error(self.ERR_RUNNING_QUERY + ' --> ' + err);
callback(-1);
}
else{
client.end();
self.InsertLT(++index,callback);
}
});//query
});
}
else{
callback();
}
答案 1 :(得分:-2)
行。我想我明白你从哪里来的。
你想做三个我想说的改变。
我不做节点,但重新编写代码看起来像:
arr = [
{name: 'Aaron', description: 'First'},
{name: 'Brian', description: 'Second'},
{name: 'Chris', description: 'Third'}
];
var i = 0;
var client = new pg.Client(self.getConnString());
client.connect(function(err) {
if (err) {
//doSomething//
}
// I don't know how node does parameterised queries, but it will look
// something like this
var sql = 'insert into load_test (name,description) values(?,?)';
var query = client.query(sql);
_.each(arr, function(lt) {
console.log(i + " <- query: " + lt.name + " desc: " + lt.description);
// There might be separate bind + excecute calls
query.execute(lt.name, lt.description);
i++;
});
// There might be a client.disconnect() needed here
您需要查阅文档以获取正确的语法。
通常,您在应用程序启动时连接并保持数据库连接,直到它退出。我猜你已经引用了某个闭包中仍然引用的数据库连接。如果您的查询需要“completed()”或“discard()”方法或类似方法,请确保将其调用以释放资源。