1.0.0 • Published 5 years ago

@ttoohey/promise-queues v1.0.0

Weekly downloads
3
License
ISC
Repository
-
Last release
5 years ago

promise-queues

Run asnyc/promise-returning functions in series with:

  • rate limiting
  • debouncing

Install

npm install @ttoohey/promise-queues

Usage

An example

import PromiseQueue from "@ttoohey/promise-queues";
const queue = PromiseQueue();

const start = Date.now();
// seconds since start to 1 decimal place
function timestamp() {
  return Number(Math.round((Date.now() - start) / 100) / 10).toFixed(1);
}

// an example Promise-returning function, delays 1 second and returns [x, timestamp]
function testPromise(x) {
  return new Promise(resolve =>
    setTimeout(() => resolve([x, timestamp()]), 1000)
  );
}

// run 3 instances of testPromise in a queue.
// the first runs, but is discarded
// the second is discarded without running
// the third runs, and is the final result
for (let i = 1; i <= 3; i++) {
  queue(() => testPromise(i))
    .then(result => console.log(timestamp(), i, result))
    .catch(error => {
      console.log(timestamp(), i, error.toString());
    });
}
console.log(timestamp(), "ready");

// Expected output:
// 0.0 ready
// 1.0 1 Error: Promise response discarded
// 1.0 2 Error: Promise discarded
// 2.0 3 [ 3, '2.0' ]