简体   繁体   中英

Promise.all() throwing error while connecting to database Error: timeout exceeded when used with Node-Postgres

I have Node.js express app with Postgres as a database. I'm using pg for database communication from the app.

This is how my db.service looks like

import { Pool } from 'pg';

const dbConfig = {/*my valid db configuration*/};

const pool = new Pool(dbConfig);

export const connectDB = async () => {
 let client;
 try {
  client = await pool.connect();
 } catch (error) {
  console.error('error while connecting to database', error);
  process.exit(1);
 }
 return client;
};

I have two queries as below

#1.

export const fetchUser = async (email) => {
const client = await connectDB();

  const query = `
    SELECT full_name FROM app.users
    WHERE  email = '${email}'
  `;

  let result;
  try {
    result = await client.query(query);
    if (result.rowCount) {
      return result.rows[0].full_name;
    }
  } catch (error) {
  } finally {
    await client.release();
  }
  return result;
};

#2

export const fetchWallet = async (email) => {
    const client = await connectDB();
    
      const query = `
        SELECT wallet_money FROM app.user_wallet
        WHERE  email = '${email}'
      `;
    
      let result;
      try {
        result = await client.query(query);
        if (result.rowCount) {
          return result.rows[0].wallet_money;
        }
      } catch (error) {
      } finally {
        await client.release();
      }
      return result;
    };

Now from one of my controller.js if I call these function separate await, no issues

ctrl.js

   const fullName = await fetchUser('some@gmail.com');
   const walletMoney = await fetchWallet('some@gmail.com');

No issues this way, however if I merge them into a single promise

   const $0= fetchUser('some@gmail.com');
   const $1= fetchWallet('some@gmail.com');
  
   const result = await Promise.all([$0, $1]);

this throws the below error

error while connecting to database Error: timeout exceeded when trying to connect at Error

Please suggest why this error is popping up & how can I get rid of it?

Thanks!

That's happening because you are trying to connect to DB separately for every query.Try to create one connection and use it for all queries!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM