Skip to content

The error leaks out from try/catch #513

Open
@budarin

Description

@budarin

Because canceling a request after a certain time is impossible (technically difficult to implement), so I'm trying to arrange a request race with a timer and if the timer is triggered earlier, we return undefined, otherwise the result of the request

const QUERY_TIMEOUT = 'query_timeout';

function sleep(ms) => new Promise((r) => setTimeout(() => r(QUERY_TIMEOUT), ms));

async function execQuery() {
  try {
    const query = sql`select * from func()`; // responds in 6 seconds SELECT pg_sleep(6);
    const response = await Promise.race([sleep(1000), query]);
    
    if (response === QUERY_TIMEOUT) {
      return;
    } else {
      return response
    }
  } catch(error) {
    console.log('PG error:', error);
  }
}

const data = await execQuery();

and in the database, a limit was set on the execution time of the statement

set statement_timeout = 5000

execute the code and get the error after getting the result from db:

{
  severity_local: 'NOTICE',
  severity: 'NOTICE',
  code: '00000',
  message: 'exception:\n' +
  '          \tmessage: query has no destination for result data\n' +
  '          \tstate  : 42601\n' +
  '          \tdetail : \n' +
  '          \thint   : If you want to discard the results of a SELECT, use PERFORM instead.\n' +
  '          \tcontext: \n' +
  '<NULL>',
  where: 'PL/pgSQL function func() line 5 at RAISE',
  file: 'pl_exec.c',
  line: '3893',
  routine: 'exec_stmt_raise'
}

Although it should not get errors at all because there has already been a return from this section of the code
In extreme cases, the code in the catch block should work and display an error in the log

PG error: query has no destination for result data

how is it defined in my code above

how to avoid the occurrence of an uncontrolled exception?

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidThis doesn't seem right

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions