{ "_args": [ [ { "raw": "throat@^4.1.0", "scope": null, "escapedName": "throat", "name": "throat", "rawSpec": "^4.1.0", "spec": ">=4.1.0 <5.0.0", "type": "range" }, "/home/jdaugherty/work/GT2/GT2-Android/node_modules/metro" ] ], "_from": "throat@>=4.1.0 <5.0.0", "_id": "throat@4.1.0", "_inCache": true, "_location": "/throat", "_nodeVersion": "8.0.0", "_npmOperationalInternal": { "host": "s3://npm-registry-packages", "tmp": "tmp/throat-4.1.0.tgz_1499385711702_0.8979995066765696" }, "_npmUser": { "name": "forbeslindesay", "email": "forbes@lindesay.co.uk" }, "_npmVersion": "4.6.1", "_phantomChildren": {}, "_requested": { "raw": "throat@^4.1.0", "scope": null, "escapedName": "throat", "name": "throat", "rawSpec": "^4.1.0", "spec": ">=4.1.0 <5.0.0", "type": "range" }, "_requiredBy": [ "/jest-changed-files", "/jest-runner", "/metro" ], "_resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", "_shasum": "89037cbc92c56ab18926e6ba4cbb200e15672a6a", "_shrinkwrap": null, "_spec": "throat@^4.1.0", "_where": "/home/jdaugherty/work/GT2/GT2-Android/node_modules/metro", "author": { "name": "ForbesLindesay" }, "bugs": { "url": "https://github.com/ForbesLindesay/throat/issues" }, "dependencies": {}, "description": "Throttle the parallelism of an asynchronous (promise returning) function / functions", "devDependencies": { "coveralls": "^2.11.2", "flow-bin": "^0.49.1", "istanbul": "^0.4.5", "jest": "^20.0.4", "promise": "^8.0.0", "sauce-test": "^1.0.0", "test-result": "^2.0.0", "testit": "^2.1.3", "typescript": "^2.3.4" }, "directories": {}, "dist": { "shasum": "89037cbc92c56ab18926e6ba4cbb200e15672a6a", "tarball": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz" }, "files": [ "index.d.ts", "index.js", "index.js.flow" ], "gitHead": "185faa1a7cf19b2dde8d1f5acaa1fed23b576107", "homepage": "https://github.com/ForbesLindesay/throat#readme", "keywords": [ "promise", "aplus", "then", "throttle", "concurrency", "parallelism", "limit" ], "license": "MIT", "maintainers": [ { "name": "forbeslindesay", "email": "forbes@lindesay.co.uk" } ], "name": "throat", "optionalDependencies": {}, "readme": "# throat\n\nThrottle the parallelism of an asynchronous, promise returning, function / functions. This has special utility when you set the concurrency to `1`. That way you get a mutually exclusive lock.\n\n[![Build Status](https://img.shields.io/travis/ForbesLindesay/throat/master.svg)](https://travis-ci.org/ForbesLindesay/throat)\n[![Coverage Status](https://img.shields.io/coveralls/ForbesLindesay/throat/master.svg?style=flat)](https://coveralls.io/r/ForbesLindesay/throat?branch=master)\n[![Dependency Status](https://img.shields.io/david/ForbesLindesay/throat.svg)](https://david-dm.org/ForbesLindesay/throat)\n[![NPM version](https://img.shields.io/npm/v/throat.svg)](https://www.npmjs.com/package/throat)\n[![Greenkeeper badge](https://badges.greenkeeper.io/ForbesLindesay/throat.svg)](https://greenkeeper.io/)\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/throat.svg)](https://saucelabs.com/u/throat)\n\n## Installation\n\n npm install throat\n\n## API\n\n### throat(concurrency)\n\nThis returns a function that acts a bit like a lock (exactly as a lock if concurrency is 1).\n\nExample, only 2 of the following functions will execute at any one time:\n\n```js\nconst throat = require('throat')(2);\n// alternatively provide your own promise implementation\nconst throat = require('throat')(require('promise'))(2);\nconst promise = Promise.resolve();\n\nconst resA = throat(() => /* async stuff... */ promise);\nconst resB = throat(() => /* async stuff... */ promise);\nconst resC = throat(() => /* async stuff... */ promise);\nconst resD = throat(() => /* async stuff... */ promise);\nconst resE = throat(() => /* async stuff... */ promise);\n```\n\n### throat(concurrency, worker)\n\nThis returns a function that is an exact copy of `worker` except that it will only execute up to `concurrency` times in parallel before further requests are queued:\n\n```js\nconst throat = require('throat');\n// alternatively provide your own promise implementation\nconst throat = require('throat')(require('promise'));\n\nconst input = ['fileA.txt', 'fileB.txt', 'fileC.txt', 'fileD.txt'];\nconst data = Promise.all(input.map(throat(2, fileName => readFile(fileName))));\n```\n\nOnly 2 files will be read at a time, sometimes limiting parallelism in this way can improve scalability.\n\n## License\n\n MIT\n", "readmeFilename": "README.md", "repository": { "type": "git", "url": "git+https://github.com/ForbesLindesay/throat.git" }, "scripts": { "coverage": "istanbul cover test/index.js", "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", "flow": "flow", "test": "node test/index.js && npm run test:types && node test/browser.js", "test:types": "jest", "tsc": "tsc --noEmit" }, "version": "4.1.0" }