使用Node.js + Postgres的顺序调用

时间:2019-12-16 09:59:42

标签: node.js promise async-await sequential

我试图用nodeJS对postgres调用2个查询。我来到了这段代码。 但是我对此并不满意,似乎做一件简单的事情太复杂了。有没有更简单的方法可以执行我要执行的操作?

基本上,我尝试在控制台上打印“ before 1st”,然后执行select now(),然后打印结果,然后写入“ after 1st”,然后打印“ before 2nd”,然后执行select now(),然后打印结果,然后输入“ 2nd之后”

getConn().
then(async() => {
  console.log("before 1st selectNow2")
  await selectNow2()
  console.log("after 1st selectNow2")
})
.then(async() => {
  console.log("before 2nd selectNow2")
  await selectNow2()
  console.log("after 2nd selectNow2")
})

async function selectNow2() {
  await client.query('SELECT NOW()')
  .then(res => {
    console.log(res.rows[0])
  })
  .catch(err => {
    console.log(err.stack)
  })
}

1 个答案:

答案 0 :(得分:0)

您无需在await内的同一语句中使用then()selectNow2()。由于您使用的是await,因此不会返回promise,这意味着返回的值将没有then()方法。

performQuery().then(() => {
  console.log("DONE");
});

async function performQuery(){
   await getConn();
   console.log("before 1st selectNow2");
   await selectNow2();
   console.log("after 1st selectNow2");
   console.log("before 2nd selectNow2");
   await selectNow2();
   console.log("after 2nd selectNow2");
}

async function selectNow2) {
  try{
    await client.query('SELECT NOW()');
    console.log(res.rows[0])
  }catch(err){
    console.log(err.stack)
  }
}