2016-09-16 93 views
1

我想從box_property刪除當所有更新查詢完成與節點和PostgreSQL

我寫這篇文章的代碼,但我不知道這是正確的還是not.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) { 
      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 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) {}) 

回答

1

同樣的道理,實行正確的方式,與pg-promise

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

一件事,你不需要爲這種類型的更新做一個循環,一個WHERE IN會做。另一方面,這種變化順序應該在交易中進行。上面的例子顯示瞭如何同時執行這兩個操作。

1

應該避免使任何東西同步的NodeJS。

在你的情況,一個簡單的報表要解決的是:

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) {}) 
     }) 
    }) 
+0

這個查詢是例如,有沒有辦法運行查詢同步? – ashkufaraz

+0

NodeJS中沒有同步查詢。如果您需要在N個其他操作完成時執行一個操作,請使用promise或計算回調。 –