npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

generic-promise-pool

v1.2.2

Published

Promise-based connection pooling library inspired by generic-pool.

Downloads

3,176

Readme

Promise Pool Build Status Coverage Status

Promise-based connection pooling library inspired by generic-pool.

Installation

$ npm install generic-promise-pool

Documentation

The full generated JSDoc documentation is hosted on GitHub here: https://NatalieWolfe.github.io/node-promise-pool/docs/. You can also find the documentation as a single markdown file at docs.md. All of the options used for configuring a pool are at the end of this README.

Examples

Creating a Pool

This example creates a pool that uses a hypothetical promise-based MySQL library.

var mysql = require('promise-mysql');
var pool = require('generic-promise-pool');

var mysqlPool = pool.create({
    name    : 'mysql',  // An optional name for the pool.
    max     : 10,       // Optional limit for how many connections to allow.
    min     : 2,        // Optional minimum connections to keep in the pool.
    create  : function(){
        var conn = mysql.createConnection(mysqlConnOptions);
        return conn.connect();
    },
    destroy : function(conn){
        return conn.end();
    }
});

For a full list of options that the PromisePool accepts, see the documentation on GitHub: https://NatalieWolfe.github.io/node-promise-pool/docs/PromisePool.Factory.html

Using the Pool

In this example we get a connection from the pool and use it to make a query.

mysqlPool.acquire(function(conn){
    // The connection remains acquired until the promise returned by this
    // function is resolved or rejected.
    return conn.query('SELECT * FROM books WHERE author = "Neal Stephenson"');
}).then(function(res){
    // The connection has been released back to the pool before we get here,
    // and the results from the acquire callback is propagated out.
    res.forEach(function(row){ console.dir(row); });
}, function(err){
    console.error(err);
});

Draining the Pool

When you want to shut down your application, it can be quite annoying to wait for idle connections to close naturally. To get past this, drain the pool before shutting down.

mysqlPool.drain()
    .then(function(){
        console.log('The pool has drained, and all connections destroyed.');
    });

Pool Factory Options

Properties

| Name | Type | Description | | --- | --- | --- | | name | string | Name of the pool. Used only for logging. | | create | create | Should create the item to be acquired, and return either a promise or the new client. | | destroy | destroy | Should gently close any resources that the item is using. Called to destroy resources. | | validate | validate | Optional. Should return true if the resource is still valid and false if it should be removed from the pool. Called before a resource is acquired from the pool. | | onRelease | onRelease | Optional. May return a promise to indicate when a client is ready to be added back to the pool after being released. | | max | number | Optional. Maximum number of items that can exist at the same time. Any further acquire requests will be pushed to the waiting list. Defaults to 1. | | min | number | Optional. Minimum number of items in pool (including in-use). When the pool is created, or a resource destroyed, this minimum will be checked. If the pool resource count is below the minimum a new resource will be created and added to the pool. Defaults to 0. | | idleTimeoutMillis | number | Optional. Maximum period for resources to be idle (e.g. not acquired) before they are destroyed. Defaults to 30000 (30 seconds). | | reapIntervalMillis | number | Optional. How frequently the pool will check for idle resources that need to be destroyed. Defaults to 1000 (1 second). | | drainCheckIntervalMillis | number | Optional. How frequently the pool will check the status of waiting clients and unreturned resources before destroying all the resources. Defaults to 100 (1/10th a second). | | log | bool | log | Optional. Whether the pool should log activity. If a function is provided, it will be called to log messages. If true is provided, messages are logged to console.log. Defaults to false. | | priorityRange | number | Optional. The range from 1 to be treated as a valid priority. Default is 1. | | refreshIdle | bool | Optional. Indicates if idle resources should be destroyed when left idle for idleTimeoutMillis milliseconds. Defaults to true. | | returnToHead | bool | Optional. Returns released object to the head of the available objects list. Default is false. |

Factory.create ⇒ Promise.<PromisePool.Client>

Kind: static typedef of Factory
Returns: Promise.<PromisePool.Client> - A promise for a new client.

Factory.destroy ⇒ Promise

Kind: static typedef of Factory
Returns: Promise - If destruction is asynchronous, a promise should be returned that will resolve after the client is destroyed.

| Param | Type | Description | | --- | --- | --- | | client | PromisePool.Client | A resource that had been created earlier. |

Factory.validate ⇒ bool

Kind: static typedef of Factory
Returns: bool - True if the resource is still valid, otherwise false should be returned.

| Param | Type | Description | | --- | --- | --- | | client | PromisePool.Client | A resource that had been created earlier. |

Factory.onRelease ⇒ Promise.<*>

Kind: static typedef of Factory
Returns: Promise.<*> - May return a promise, in which case the client wont join the pool until the promise resolves. If it is rejected, then the client will be destroyed instead.

| Param | Type | Description | | --- | --- | --- | | client | PromisePool.Client | A resource that has been released back to the pool. |

Factory.log : function

Kind: static typedef of Factory

| Param | Type | Description | | --- | --- | --- | | msg | string | The message to be logged. | | level | string | The importance of this log message. Possible values are: verbose, info, and error. |