postgresql Node.js c/await适当使用

xzlaal3s  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(178)

我对Node.js有点陌生,并试图了解如何正确使用Node.js。我有一个函数(在控制器中),它管理与数据库的连接并执行简单的查询(从表中选择 *)。所以我的问题是这两个代码中哪一个正确使用Node. js/await(都可以工作)?
代码1:

  1. const drzaveLista = async (req, res) => {
  2. try{
  3. await pool.connect(async(err, client, done) => {
  4. if (err) throw err;
  5. await client.query("SELECT * FROM DRZAVE;", [], (err, result) => {
  6. done();
  7. if (err) throw err;
  8. res.render("drzave", {listaDrzava: result.rows});
  9. });
  10. });
  11. } catch (err) {
  12. console.log(err);
  13. }
  14. };

字符串
代码2:

  1. const drzaveLista = async (req, res) =>{
  2. const client = await pool.connect();
  3. try{
  4. const result = await client.query("SELECT * FROM DRZAVE;");
  5. res.render("drzave", {listaDrzava: result.rows});
  6. } catch (err){
  7. console.log(`Greska ${err}`);
  8. } finally {
  9. client.release();
  10. }
  11. };


P.S.如果这很重要,我使用PostgreSQL作为数据库。

2jcobegt

2jcobegt1#

使用asyncawait时不需要传递回调。
代码2是正确的用法,以及它实际上是如何完成的。
如果您不希望控制器是异步的,还有另一种机制。

  1. const drzaveLista = (req, res) =>{
  2. const client = new Promise(async (resolve, reject) => {
  3. await pool.connect().then(_client => resolve(_client)).catch(err => reject(err));
  4. });
  5. try{
  6. const result = new Promise(async (resolve, reject) => {
  7. await client.query("SELECT * FROM DRZAVE;").then(_result => resolve(_result)).catch(err => reject(err));
  8. });
  9. res.render("drzave", {listaDrzava: result.rows});
  10. } catch (err){
  11. console.log(`Greska ${err}`);
  12. } finally {
  13. client.release();
  14. }
  15. };

字符串

展开查看全部

相关问题