2.2.5 • Published 7 years ago

promise-queue v2.2.5

Weekly downloads
760,980
License
MIT
Repository
github
Last release
7 years ago

promise-queue NPM Version Build Status Coverage Status Dependency Status

Promise-based queue

Installation

promise-queue can be installed using npm:

npm install promise-queue

Interface

  • new Queue(Number maxConcurrent, Number maxQueued): Queue
  • Queue#add(Function generator): Promise - adds function argument that generates a promise to the queue
  • Queue#getQueueLength(): Number - returns current length of buffer(added but not started promise generators) it <= maxQueued
  • Queue#getPendingLength(): Number - returns number of pending(concurrently running) promises it <= maxConcurrent

Example

Configure queue

By default Queue tries to use global Promises, but you can specify your own promises.

Queue.configure(require('vow').Promise);

Or use old-style promises approach:

Queue.configure(function (handler) {
    var dfd = $.Deferred();
    try {
        handler(dfd.resolve, dfd.reject, dfd.notify);
    } catch (e) {
        dfd.reject(e);
    }
    return dfd.promise();
});

Queue one by one example

var maxConcurrent = 1;
var maxQueue = Infinity;
var queue = new Queue(maxConcurrent, maxQueue);

app.get('/version/:user/:repo', function (req, res, next) {
    queue.add(function () {
        // Assume that this action is a way too expensive
        // Call of this function will be delayed on second request
        return downloadTarballFromGithub(req.params);
    })
    .then(parseJson('package.json'))
    .then(function (package) {
        res.send(package.version);
    })
    .catch(next);
});

Getting number of pending promises and queue(buffered promises) length

var maxConcurrent = 1;
var maxQueue = 1;
var queue = new Queue(maxConcurrent, maxQueue);

queue.add(function () {
    queue.getQueueLength() === 0;
    queue.getPendingLength() === 1;
    return somePromise();
});

queue.add(function () {
    queue.getQueueLength() === 0;
    queue.getPendingLength() === 0;
    return somePromise();
});

queue.getQueueLength() === 1;
queue.getPendingLength() === 1;

Live example

@remote.it/serverless@fatihkydev/gatsby-source-datocmsziflow-js-microservicebig-pink-import-testsop-cdmamocrm-js-rn@snyk/snyk-devserverless-fork-upload-ioquantconnect-clifiletapeexpo-compatibility-checksuper-updater@pasarprotocol/pasar-sdk@infinitebrahmanuniverse/nolb-promise-@everything-registry/sub-chunk-2481win-grepwix-code-mlsvuexblazewalkman-gowpilib-ws-robot-romiwildspiderstore-ssm-parametersswgohthing-it-device-browserthing-it-device-lippert-parcel-stationthomaschaaf-serverlessvelo-sync@dolchi21/iqueue@rundeck/clientitdlibjamykaerukunl-rm-modulesncd-red-mcp3425stackvalidatorspace-clienttwistedtwisted-axiosuac-serverless-composeumc-uiuilicious-clitplink-smarthome-apitips-twistedtransmutejsturbostatus@amuslija/serverless@beautils/all@bref.sh/serverless@cellaflora/florad@chec/seeder@chenyufei2022/elastos-connectivity-sdk-js@chenyufei2022/hive-js-sdk@boris-turner/amphora-search@decoupled/xlibyryve-botts-rundeckts-ssh@eastsideco/escshopify@eastsideco/salvo-lite@heat/awsless@flamescape/service-bus-pubsub@flamescape/service-bus-rpc@fons/fons@hperchec/scorpion-ui@emigrad/announce@gatsbyjs/gatsby-source-datocms@elastosfoundation/elastos-connectivity-sdk-js@elastosfoundation/hive-js-sdk@forlagshuset/fetch-manager@foxglove/ws-protocol-examples@gordalina/magic-home@labshare/request-tracking-api@lizc/pdfassembler@markwylde/liferaft@erii/mirakurun@elabox/elastos-connectivity-sdk-js@elabox/hive-js-sdk@metacodelabs/janus-videoroom-web-sdk@mobiletoll/serverless@kanreisa/homebridge-wave-plus@kalamazoo/webdriver-runner@jlenon7/zedjs@rasahq/gatsby-source-datocms@publicdomain/serverless@prometeia/pdfassembler@saltcorn/nominatim-geocode@paulcbetts/electron-rxdb@rodrigogs/serverlessmtfos-h5p-nodejs-librarymobileappmongodmiksermirakurunminecraft-wrapminecraft-wrap-fabricncd-red-ads1115ncd-red-ads7828ncd-red-ams5812ncd-red-mcp3428
2.2.5

7 years ago

2.2.4

7 years ago

2.2.3

9 years ago

2.2.2

10 years ago

2.2.1

10 years ago

2.2.0

10 years ago

2.1.2

10 years ago

2.1.1

11 years ago

2.0.1

11 years ago

2.0.0

11 years ago

1.0.1

11 years ago

1.0.0

12 years ago