{"_id":"promise-dispatcher","_rev":"35-043a74b0c8fb6170c5726efd4eabd067","time":{"modified":"2022-05-02T22:08:05.594Z","created":"2022-05-02T00:37:30.571Z","1.0.0":"2014-08-18T22:32:08.527Z","1.0.1":"2014-08-18T22:43:56.394Z","1.1.0":"2014-08-23T17:08:20.574Z","1.1.1":"2014-08-23T21:19:29.850Z","1.1.2":"2014-08-23T22:41:25.832Z","1.2.0":"2014-08-24T16:37:46.934Z","1.2.1":"2014-08-24T16:48:18.985Z","1.2.2":"2014-08-24T16:54:42.244Z","1.2.3":"2014-08-24T16:55:17.150Z","1.2.4":"2014-08-24T17:17:37.499Z","1.2.5":"2014-08-24T17:19:25.890Z","1.2.6":"2014-08-30T16:46:13.917Z","1.3.0":"2014-08-30T16:58:56.221Z","1.3.1":"2014-08-30T17:04:25.527Z","1.3.2":"2014-08-30T17:09:13.066Z","1.0.2":"2022-05-02T00:37:30.729Z","1.0.3":"2022-05-02T22:01:06.715Z","1.0.4":"2022-05-02T22:08:05.523Z"},"name":"promise-dispatcher","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.2":{"name":"promise-dispatcher","version":"1.0.2","description":"A lightweight library to manage promises executions","main":"index.js","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+https://github.com/sebps/promise-dispatcher.git"},"author":{"name":"sebps"},"license":"MIT","bugs":{"url":"https://github.com/sebps/promise-dispatcher/issues"},"homepage":"https://github.com/sebps/promise-dispatcher#readme","devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0"},"_id":"promise-dispatcher@1.0.2","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-E3pnkWDEhlvaKeYWOhqxVbvaekO3Cc7+JRYlgHi19ztbxevDXF7ZK0NvLLbGd9ubOzzYMf3xKZhjCBHmIyb6PA==","shasum":"e6d840554aef0c5be5cea8838f8ddd0ae7cf1d97","tarball":"https://registry.npmjs.org/promise-dispatcher/-/promise-dispatcher-1.0.2.tgz","fileCount":4,"unpackedSize":7809,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGh5yM1ufED1mW1FkjZfYhGsl6ltwHvviPs8QFh4qv0WAiBgJ1s2BjDP+emDLgamgYBse7tPfObGWXHHPpdxY2I6xw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJibyfKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoiqg/+L/0nc41DOGzTJqg8KEpg+/tHVb81Tbu2n3GFD4THcvJNDb91\r\nOw19mfmbUXy6lhDR39Z8uS3q3QwUJ1WevvckVOxyiydyrnSD9k55kTlgGW6S\r\n1tRqKD1pPf9cV9fTIrwVaIhmFMEM7tfLA3bnQk9+eOE0cPOQz2UngSRF2rs8\r\nCsipRGjxQLxKYnoRBLkCZ8IIccD/Hcar2aXYh4HUmu4PgZUCVmLhXmA1F0UG\r\nPzjruLruhEuaLWEY8yRQNQeXcDZ8OmJqoYripDgEXO4INnrzuYCFK8zYQTmz\r\nBUnC1GDy8XJJJDeIz9k5HPvJYRzzRQiMHAbBtC6JzZkeUvtZxomJR00ujY5j\r\nWfwqOv1Kr2xkGky7DDj243by7Ujiw2zyvWAPsZ/Umt/dlC9YvdfBafcnUUHo\r\nT7vDzuThO9JRwiyqdSA3ixTZF/gwi3F7Ugkf2y8IZDjDBsiTFvtuEIQFVflM\r\nmCsb58WCqEqiTbd7Z6vEyWEzHXWOs1xtfKaAwCnUbBJemC5tEwXP2ZPVgTj2\r\ncHPHAc+FgJzOWRIawTiN5VRY2uBkAsx85Kg/IG6rx6G3LjBySmHFIEFgVWgv\r\nYiQux81GCkXQdBORsAV1NtOf4epXoVLmDsC2tTiLGqLRLxSE/caRQ5PBvlTl\r\ntb6yiDstRD5ByAG8EIh+RLzMufklicOlKTI=\r\n=3b5Y\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"sebpsdev","email":"sebpsdev@gmail.com"},"directories":{},"maintainers":[{"name":"sebpsdev","email":"sebpsdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/promise-dispatcher_1.0.2_1651451850572_0.13139227437614265"},"_hasShrinkwrap":false},"1.0.3":{"name":"promise-dispatcher","version":"1.0.3","description":"A lightweight library to manage promises executions","main":"index.js","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+https://github.com/sebps/promise-dispatcher.git"},"author":{"name":"sebps"},"license":"MIT","bugs":{"url":"https://github.com/sebps/promise-dispatcher/issues"},"homepage":"https://github.com/sebps/promise-dispatcher#readme","devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0"},"gitHead":"62189e52fc0d5cd35eaff6894b4bcd911d6f37be","_id":"promise-dispatcher@1.0.3","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-00kJ+UG8TBfQEU7JprU/mDLkHwZFG2kUzC8nNpdpBykXNnT2rH72j4OFTO275Av7ae63bnWz+FQPbLe0Y3vJwA==","shasum":"87db43c0ed34a8409d4bce7fafb0d4273da3ab76","tarball":"https://registry.npmjs.org/promise-dispatcher/-/promise-dispatcher-1.0.3.tgz","fileCount":4,"unpackedSize":9575,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4xyl7EsYAaCbGm90JiaJPIpCBuHlXRKZSFlJs4LrYaAIgWyrHhlCM0/aW4C0vFzsrgxc3O0vKETPynkuoY/ohgV0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJicFSiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqhPA/+M2bKCI9Ju1Ij96PHIe2AXkujOps1v82wGa0iLz9UtZgB+E6K\r\nH92o4aq11V5QXu/DIlC45qYK6XYAms4Vzme1QUe0rkssDs02EIHiIVfqFe+s\r\njdDBHy6qsPzDs7DJTewEUyoHMHVqCWgXgYd1mstPAGXZmVcCnR9l1v49kdbB\r\nw29hvroeIEL/pPxQKM4w2V/SmeerNWZ6lyw24snBeM5XfL0Uqi3H++f+cba1\r\nJz+qI3uUMAwvD3bjm8weo79qVPeman69tO++nNYkmeez2OdXWOntFxKdn0RE\r\ntAq6euogwJz2Rh2/z37FnVkRksNYFS2ViDgah64FlVgcP4DcZ1bQGhp/Hd4T\r\nigLfBNcn9z6awlz+kqKlf5FzLHaM025xQ4p7Mb5FLNyKj5Z6xrit4gmwG3OM\r\n0XZXPwwA8NAHIqs8doPq8dty4G7HXXNBgdb++DVcnHVh74BaKXl3XSE7UY4d\r\nDUWvW9D25BIIeRpJ7fZ5CRJioDCVOMKQ4cNXrY3v3Ze8sHA/+kx9x9edt4jD\r\n0UgJWX1T6JWNUOJED9JXFa/41MlUIQx9rK1/E7gtPOltAcv/y2qlcV8G8Uqg\r\neeHVaMgkW/+5XDTWa8W9RHDV7lZmmMmcfStZUjcjHQJJrWSXdAJbdjnnUtm9\r\nNf7FaCUVeZOVy4/SoGxiKT/ye49UZuFWyhM=\r\n=QMds\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"sebpsdev","email":"sebpsdev@gmail.com"},"directories":{},"maintainers":[{"name":"sebpsdev","email":"sebpsdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/promise-dispatcher_1.0.3_1651528866582_0.21560650425797667"},"_hasShrinkwrap":false},"1.0.4":{"name":"promise-dispatcher","version":"1.0.4","description":"A lightweight library to manage promises executions","main":"index.js","scripts":{"test":"mocha"},"repository":{"type":"git","url":"git+https://github.com/sebps/promise-dispatcher.git"},"author":{"name":"sebps"},"license":"MIT","bugs":{"url":"https://github.com/sebps/promise-dispatcher/issues"},"homepage":"https://github.com/sebps/promise-dispatcher#readme","devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0"},"gitHead":"97664dedba5f32313b4260296d05bd427a196bfc","_id":"promise-dispatcher@1.0.4","_nodeVersion":"16.13.1","_npmVersion":"8.1.2","dist":{"integrity":"sha512-sB4HHRZP2hdU4Ab32pUZ1gFjllz+8bkaKYLHP/XMnghPvSYNZ3wDfHWcqzeW8835ZLxrvY7gnIzcw6t5AoFQug==","shasum":"b57cc1254b0e89d6de53175c54304add38099b4a","tarball":"https://registry.npmjs.org/promise-dispatcher/-/promise-dispatcher-1.0.4.tgz","fileCount":4,"unpackedSize":9876,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAffPltynKbrchvP5n5Rcfvm6VSWhJYfm2BYumU7BQh7AiEAsS//UzVZGBLAfch2bJSU0HwoPeHO5YOVCNSIMhuZDWk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJicFZFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmodvBAAghojMJ+E/dO/uEZO1EhOS5sixQqd/f9EbEYupL8GmyCjEwra\r\nmNaltl8FH2ktuxRzWLIbj1mSj0OLVdjoTm/Kb8Qodo3MgcMd0TRqitn1JOy/\r\nP4YoxdX8euX742eMciTzBfC0J8BLcF3cWbmwnwhbyO/PbcolDaSHFC3DKuKu\r\nNfVECikN8VMNgQknbk2yZYQs+cgOKXiMfByhdEimSXimTnMQ5ZOIrYfoA4Nv\r\nX2DsgUWdwNQ5Su0UYjZ0Z8k/0e2BLZQKgVqYO+2vk3VPbrF7hW5Zgl6bRNy6\r\nEpoZxxO2Pbp/mdvbd2y0QqjFbefvqlK+KJTZPcHy9Mw8a6Gh4wNjJIpaHnoG\r\n15hSvIUyrvgJnuSpode5mOiiQ9KSNQNArPhUoCsYRUS/R7v41pDD0AAF4wzB\r\nIF9tJuAuyXtpd53J1r//YtwgyRPExyEc+CdHG1IhfpMkv41NHWGPm8l0f943\r\n4VtX7cIBwjy+/uaOZ/lYm5wX/tQPQ2vlvsQILeAnqAu8db/2qPHmuNHYGEj7\r\nRijRM4Lu/OWpZ+W+2LFU0hsDxJ1bXH+cvg22KUcdD3sCZs4da4pNctNhkyJe\r\ny1veCWU6DrZ6ZzjfLssB+KmH+8A57Hk26Ssx0vq1MoIdeDpXt6VigFWbteoa\r\nkammw4KKPh7z5B4gchq7EaxQJfRPUuZifNA=\r\n=kQRF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"sebpsdev","email":"sebpsdev@gmail.com"},"directories":{},"maintainers":[{"name":"sebpsdev","email":"sebpsdev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/promise-dispatcher_1.0.4_1651529285327_0.342734138677371"},"_hasShrinkwrap":false}},"maintainers":[{"name":"sebpsdev","email":"sebpsdev@gmail.com"}],"description":"A lightweight library to manage promises executions","homepage":"https://github.com/sebps/promise-dispatcher#readme","repository":{"type":"git","url":"git+https://github.com/sebps/promise-dispatcher.git"},"author":{"name":"sebps"},"bugs":{"url":"https://github.com/sebps/promise-dispatcher/issues"},"license":"MIT","readme":"# PromiseDispatcher\n\npromise-dispatcher\n==========\n\nA lightweight library to manage promises according to settings such as processing order, time interval and rate per time interval. \n\n<!-- TOC -->\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Examples](#examples)\n- [License](#license)\n<!-- /TOC -->\n\n## Features\n- Promise processing mode - management of the promises dispatching order ( FIFO queue or LIFO stack ) \n- Time Interval - time interval used to calculate promise dispatching rate ( default to 1 second )  \n- Rate dispatching -  management of the promise dispatching rate ( max promise per time interval )\n\n## Installation\n\n```sh\n$ npm install promise-dispatcher\n```\n\n## Usage\n\n### Loading the module\n```js\nconst PromiseDispatcher = require('promise-dispatcher');\n```\n\n### Creating a new promise dispatcher instance\n```js\nconst promiseDispatcher = new PromiseDispatcher(tasks, mode = \"QUEUE\", rate = 1, interval = 1000)\n```\n\n### Dispatch a new promise\nTo dispatch a new promise in a promise dispatcher instance, it must be wrapped into a provider function that return the promise so that it can be executed whenever necessary by the promise dispatcher\n\n```js\nconst promiseProvider = function() { \n    return new Promise((resolve,reject) => {\n        // do stuff\n        resolve()\n    })\n}\n\npromiseDispatcher.dispatchPromise(promiseProvider)\n```\n\n### startDispatching\nA promise dispatcher instance starts to process promises once its startDispatching method is called\n\n```js\npromiseDispatcher.startDispatching()\n```\n\n### stopDispatching\nA promise dispatcher instance stops to process promises once its stopDispatching method is called\n\n```js\npromiseDispatcher.stopDispatching()\n```\n\n## Examples\n\n```js\nconst rate = 5 // promise rate per time interval\nconst interval = 1000 // time interval in ms\nconst promiseProviders = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(function(value) {\n    return function () {\n        return new Promise((resolve, reject) => {\n            console.log(value)\n            resolve(value)\n        });\n    };\n});\n```\n\n### Queue mode\n```js\n(async function() {\n  const promiseDispatcher = promiseDispatcher.new(\"QUEUE\", rate, interval)\n  promiseDispatcher.startDispatching()\n  const promises = promiseDispatcher.dispatchPromises(promiseProviders)\n  // expected console logs :\n  // after 0 second : 1,2,3,4,5\n  // after 1 second : 6,7,8,9,10\n  const results = await Promise.all(promises)\n  console.log(results)\n // expect results to be : 1,2,3,4,5,6,7,8,9,10\n  promiseDispatcher.stopDispatching()\n})();\n```\n\n### Stack mode\n```js\n(async function() {\n    const promiseDispatcher = promiseDispatcher.new(\"STACK\", rate, interval)\n    promiseDispatcher.startDispatching()\n    const promises = promiseDispatcher.dispatchPromises(tasks)\n    // expected console logs :\n    // after 0 second : 10,9,8,7,6\n    // after 1 second : 5,4,3,2,1\n    const results = await Promise.all(promises)\n    console.log(results)\n   // expect results to be : 10,9,8,7,6,5,4,3,2,1\n    promiseDispatcher.stopDispatching()\n})();\n```\n\n## License\n\nMIT\n\n[npm-url]: https://www.npmjs.com/package/promise-dispatcher\n","readmeFilename":"README.md"}