Node.js 节点与PostgreSQL的同步查询
我想在所有更新查询完成后从Node.js 节点与PostgreSQL的同步查询,node.js,postgresql,Node.js,Postgresql,我想在所有更新查询完成后从框中删除\u属性 我写了这段代码,但我不确定这是否正确。我想同步运行更新查询 var data = [1, 2, 3, 4]; //data generate dynamicly for (var i = 0; i < BoxData.length; i++) { pool.connect(function(err, client, done) { client.query("update box set gamer_id=null
框中删除\u属性
我写了这段代码,但我不确定这是否正确。我想同步运行更新查询
var data = [1, 2, 3, 4]; //data generate dynamicly
for (var i = 0; i < BoxData.length; i++) {
pool.connect(function(err, client, done) {
client.query("update box set gamer_id=null where box_id=$1; ", [data[i]], function(err, resultUpdate) {
if ((i + 1) == BoxData.length) {
//when all query finished then run this query
client.query("delete from box_property where gamer_id=$1;", [gamer_id], function(err, resultUpdate) {})
}
})
})
}
var数据=[1,2,3,4]//数据动态生成
对于(var i=0;i
是否有方法运行更新查询同步,并在循环之后运行删除查询
像这样
var data = [1, 2, 3, 4]; //data generate dynamicly
for (var i = 0; i < BoxData.length; i++) {
pool.connect(function(err, client, done) {
client.query("update box set gamer_id=null where box_id=$1; ", [data[i]], function(err, resultUpdate) {
})
})
}
//when all query finished then run this query
client.query("delete from box_property where gamer_id=$1;", [gamer_id], function(err, resultUpdate) {})
var数据=[1,2,3,4]//数据动态生成
对于(var i=0;i
您应该避免在NodeJ中同步任何内容
在您的情况下,一个简单的In语句应该可以解决以下问题:
var params = [];
for (var i = 1; i <= data.length; i++) {
params.push("$"+i);
}
pool.connect(function(err, client, done) {
client.query("update box " +
" set gamer_id=null " +
" where box_id in "+params.join(",")+"; ",
[...data], function(err, resultUpdate) {
client.query("delete from box_property " +
" where gamer_id=$1;",
[gamer_id], function(err, resultUpdate) {})
})
})
var参数=[];
对于(var i=1;i相同的逻辑,以正确的方式实现,包括:
一方面,您不需要为该类型的更新执行循环,一个在中的位置就可以了。另一方面,这样的更改序列应该在事务内部。上面的示例向您展示了如何同时执行这两个操作。例如,此查询是否有运行查询同步的方法?NodeJS中没有同步查询。如果您需要在N个其他操作完成时执行一个操作,请使用承诺或计数回调。
var data = [1, 2, 3, 4]; //data generated dynamically
db.tx(t => {
return t.none('UPDATE box SET gamer_id = null WHERE box_id IN ($1:csv)', [data])
.then(() => {
return t.none('DELETE FROM box_property WHERE gamer_id = $1', [gamer_id]);
});
})
.then(() => {
// success
})
.catch(error => {
// error
});