@momsfriendlydevco/throttle

@MomsFriendlyDevCo/throttle ======================= Async throttling mechanism based on MongoDB locking.

Usage no npm install needed!

<script type="module">
  import momsfriendlydevcoThrottle from 'https://cdn.skypack.dev/@momsfriendlydevco/throttle';
</script>

README

@MomsFriendlyDevCo/throttle

Async throttling mechanism based on MongoDB locking.

var Throttle = require('@momsfriendlydevco/throttle');

var throttler = new Throttle();
throttler.init()
    .then(()=> throttler.throttle(() => {
            // Worker is complete when promise resolves
            return Promise.resolve();
        },
        {
            id: 'foo',
            hash: ({foo: 'bar'}),
        }
    ))
    .catch(e => {
        // The queue full of workers already in progress.
    });

API

Throttle(settings)

Main constructor. Requires instance.init() to be called before the instance is functional.

Throttle.defaults

Default settings.

Setting Type Default Description
leading boolean true Bypasses use of the queue
queue number 1 Number of items for which to keep queued callbacks
lock object See below Lock package configuration options
lock.expiry number 1 hour The time in milliseconds until the lock expires
lock.ttl number 1 min The time in milliseconds until keep-alive expires
lock.mongodb object See below MongoDB connection options
lock.mongodb.uri string "mongodb://localhost/mfdc-cache" The MongoDB URI to connect to
lock.mongodb.collection string "locks" The name of the collection to use
lock.mongodb.options object See code Additional connection options to use
lock.omitFields array ['_id', '__v'] Which fields to autmatically skip when using get()
lock.includeKeys boolean true Also save the key field values, reduces overhead to disable this

throttler.init(settings)

Check all settings and connect to the database.

throttler.throttle(worker, options)

Callback worker will be called immediately if a lock is available or otherwise throttled in a queue. When queue is full promise will be rejected with error "Throttle queue is full".

Option Type Default Description
id mixed undefined Key within lock collection
hash string undefined An object which uniquely identies the object being locked