Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点与PostgreSQL的同步查询_Node.js_Postgresql - Fatal编程技术网

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
    });