Skip to content

.use does not handle synchronous work functions #296

Description

@joelrbrandt

If a user accidentally passes a non-Promise-returning function (or a function that throws a synchronous exception) to .use, .use will throw an exception and never release its resource.

One way this came up for me was using .use to access some property on the resource that is a cached value of some recent external state (e.g. statistics from a database server).

For example:

async function getFreeMemory(): Promise<number> {
  const memory = await myPool.use(resource => resource.memory);
  return memory.free;
} 

Calling the above function will throw TypeError: fn(...).then is not a function and the resource will never be released. This happens here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions